2016-05-04 10 views
0

グリッドビューのカスタム背景を設定したいが、グリッドの読み込み、グリッドの背景の最初のアイテムが読み込まれずに残りのアイテムが正しく読み込まれている。 以下は私のコードですので助けてください。Android GridViewの最初のアイテムの背景が機能していない

public class PicassoExample extends Activity { 

    private GridView gvFirst; 
    private ArrayList<MyModel> arrayList; 
    private PicassoImageAdapter adapter; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_picasso_example); 

     gvFirst = (GridView)findViewById(R.id.gvFirst); 
     arrayList = new ArrayList<MyModel>(); 

     loadArraylist(); 

     adapter = new PicassoImageAdapter(getApplicationContext(),arrayList); 
     gvFirst.setAdapter(adapter); 
    } 
    private void loadArraylist() { 
     arrayList.add(new MyModel("http://i.imgur.com/rFLNqWI.jpg")); 
     arrayList.add(new MyModel("http://i.imgur.com/C9pBVt7.jpg")); 
     arrayList.add(new MyModel("http://i.imgur.com/rT5vXE1.jpg")); 
    } 
} 

ここは私のアダプタクラスです。

public class PicassoImageAdapter extends BaseAdapter { 
    private Context context; 
    private LayoutInflater inflater; 
    private ArrayList<MyModel> arrayList; 

    public PicassoImageAdapter(Context applicationContext, ArrayList<MyModel> arrayList) { 
     context = applicationContext; 
     this.arrayList = arrayList; 
    } 
    @Override 
    public int getCount() { 
     return arrayList.size(); 
    } 
    @Override 
    public Object getItem(int position) { 
     return position; 
    } 
    @Override 
    public long getItemId(int position) { 
     return position; 
    } 
    class Holder { 
     ImageView imageView; 
    } 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View myView = null; 
     try { 
      Holder holder; 
      myView = convertView; 

      if (myView == null) { 

       inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
       myView = inflater.inflate(R.layout.adapter_picasso, null); 
       holder = new Holder(); 

       // here I am setting custom backgroud of each item of gride. 
       myView.setBackgroundResource(R.drawable.corner_gride_layout); 

       holder.imageView = (ImageView) myView.findViewById(R.id.imageView); 
       myView.setTag(holder); 
      } 
      else { 
       holder = (Holder) myView.getTag(); 
      } 

      MyModel model = arrayList.get(position); 
      Picasso.with(this.context) 
        .load(model.getStrUrl()) 
        .placeholder(R.drawable.ic_launcher) 
        .into(holder.imageView); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return myView; 
    } 
} 

ここはアダプターのxmlです。

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <ImageView 
     android:id="@+id/imageView" 
     android:layout_width="100dp" 
     android:layout_height="100dp" 
     android:scaleType="fitXY" 
     /> 
</LinearLayout> 

実際に私はPicassoライブラリを使用してインターネットから写真を読み込みました。私はグリッドビューの各項目のカスタム背景を作成しましたが、グリッドビューが最初にロードされるとき、グリッドの最初の項目(グリッドのゼロ位置)のみが機能しないこと、およびグリッドビューの背景のすべての項目が適切に設定されます。

+0

設定された背景色の背景を外に出すif else条件。 myView.setBackgroundResource(R.drawable.corner_gride_layout); –

答えて

0

以下のコードを使用して問題を解決しました。

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 


    View myView = null; 
    try { 
     Holder holder; 
     myView = convertView; 

     if (myView == null) { 

      inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      myView = inflater.inflate(R.layout.adapter_picasso, null); 
      holder = new Holder(); 

      holder.imageView = (ImageView) myView.findViewById(R.id.imageView); 
      myView.setTag(holder); 
     } 
     else { 
      holder = (Holder) myView.getTag(); 
     } 
     if(Build.VERSION.SDK_INT>15) 
     { 
      myView.setBackground(ContextCompat.getDrawable(context, R.drawable.corner_gride_layout)); 
     } 
     else { 
      myView.setBackgroundDrawable(context.getResources().getDrawable(R.drawable.corner_gride_layout)); 
     } 

     MyModel model = arrayList.get(position); 

     Picasso.with(this.context) 
       .load(model.getStrUrl()) 
       .placeholder(R.drawable.ic_launcher) 
       .into(holder.imageView); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return myView; 
} 
+0

あなたの答えに言及してください、あなたの問題の解決方法は? – jayeshsolanki93

+0

こんにちはJayesh私のコードでは 'myView.setBackground'を使用しています。 –

0

最初にgetViewメソッドを呼び出すと、親ビューの幅と高さがゼロになります。値を設定するために画面のコンテンツの幅と高さを取得できますか? myView = inflater.inflate(R.layout.adapter_picasso、null)の後にこれらのコード行を追加します。

myView.setLayoutParams(new 
AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT, 
AbsListView.LayoutParams.MATCH_PARENT)); 
関連する問題