2

20 項目の gridview を作成しました。このグリッドビューをバインドするためにカスタム アダプターを使用しました。グリッドビューでスクロールすると、アイテムのインデックスが変更されているか、一部のアイテムが非表示になっていることがあります。N グリッドビュー全体が表示されないことが何度かありました。それと何を着ているのかわからない。

      public class MyAdapter extends BaseAdapter {

        final int NumberOfItem = 90;
        private Bitmap[] bitmap = new Bitmap[NumberOfItem];

        View grid;

        private Context context;
        private LayoutInflater layoutInflater;

        MyAdapter(Context c){
         context = c;
         layoutInflater = LayoutInflater.from(context);

         //init dummy bitmap,
         //using R.drawable.icon for all items
       /*  for(int i = 1; i < NumberOfItem; i++){
          bitmap[i] = BitmapFactory.decodeResource(context.getResources(), R.drawable.image1);
         }*/
        }

        @Override
        public int getCount() {
         // TODO Auto-generated method stub
         return imageIDs.length;
        }

        @Override
        public Object getItem(int position) {
         // TODO Auto-generated method stub
         return position;
        }

        @Override
        public long getItemId(int position) {
         // TODO Auto-generated method stub
         return position;
        }

        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {
         // TODO Auto-generated method stub


         if(convertView==null){
          grid = new View(context);
          grid = layoutInflater.inflate(R.layout.main, null);

          ImageView imageView = (ImageView)grid.findViewById(R.id.image);
          imageView.setBackgroundResource(imageIDs[position]);


          TextView textView = (TextView)grid.findViewById(R.id.text);
          textView.setText(names[position]);


         }else{

             grid = (View)convertView;


         }


         return grid;
        }


        Integer[] imageIDs = {

                R.drawable.attorneys_180, R.drawable.auto_repair_180, R.drawable.coffee_180, R.drawable.gas_stations_180,
                R.drawable.grocery_180, R.drawable.hotels_180, R.drawable.locksmith_180, R.drawable.nightclubs_180,
                R.drawable.plumbers_180

        };

        String[] names = {"Attorneys","Auto Repair","Coffee","Gas Stations","Grocery","Hotels","Locksmith","NightClubs","Plumbers"};


    }

main.xml の内容

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content" android:gravity="center">

<ImageView
android:id="@+id/image"
android:layout_width="67dp"
android:layout_height="67dp" android:background="@drawable/ic_launcher"/>

<TextView
 android:id="@+id/text"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:layout_alignRight="@+id/image"
 android:layout_below="@+id/image"
 android:text="gsdfgsd"
 android:textColor="#000000" android:gravity="center"/>

 </RelativeLayout>

適切な解決策を教えてください。

ありがとう、ジェイ・パテル

4

1 に答える 1

0

アクティビティの残りのコードを見ずにエラーを見つけるのは少し難しいですが、getViewメソッドの修正から始めることができます (行った変更の横にいくつかのコメントを追加しました)。

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) 
    {
         if(convertView == null){
             //grid = new View(context); You don't need this because next line creates it for you
             grid = layoutInflater.inflate(R.layout.main, null);
         }
         else
         {
             grid = convertView;
         }

         // You always need to set the right image and text, even when you have a non-null convertView

         ImageView imageView = (ImageView)grid.findViewById(R.id.image);
         imageView.setBackgroundResource(imageIDs[position]);

         TextView textView = (TextView)grid.findViewById(R.id.text);
         textView.setText(names[position]);

         return grid;
    }
于 2012-06-20T09:05:59.753 に答える