0

gridView を使用して 1 つの Android アプリケーションを作成しようとしています。このアプリケーションでは、GridView に画像をランダムに追加しようとしています。5 つの画像があり、その画像が R.drawable.c0、R.drawable.c1、R.drawable.c2、R.drawable.c3、R.drawable.c4 のようなドローアブルに追加されました。

各グリッドをクリックしている間、各グリッドの画像がランダムに変更されます.グリッドをクリックするたびに画像をランダムに変更するためにコーディングが適切に機能しています.しかし、画像名を取得するには助けが必要です.

    public class MainActivity extends Activity {
 GridView gridview;
 ImageView imageView ;

 public static Integer[] mThumbIds = {
    R.drawable.c0, R.drawable.c1,
    R.drawable.c2, R.drawable.c3,
    R.drawable.c4,


    R.drawable.c0, R.drawable.c1,
    R.drawable.c2, R.drawable.c3,
    R.drawable.c4,

    R.drawable.c0, R.drawable.c1,
    R.drawable.c2, R.drawable.c3,
    R.drawable.c4,

    R.drawable.c0, R.drawable.c1,
    R.drawable.c2, R.drawable.c3,
    R.drawable.c4,

    R.drawable.c0, R.drawable.c1,
    R.drawable.c2, R.drawable.c3,
    R.drawable.c4,


    R.drawable.c0, R.drawable.c1,
    R.drawable.c2, R.drawable.c3,
    R.drawable.c4,

    R.drawable.c0, R.drawable.c1,
    R.drawable.c2, R.drawable.c3,
    R.drawable.c4,

    R.drawable.c0, R.drawable.c1,
    R.drawable.c2, R.drawable.c3,
    R.drawable.c4,


    R.drawable.c0, R.drawable.c1,
    R.drawable.c2, R.drawable.c3,
    R.drawable.c4,


    R.drawable.c0, R.drawable.c1,
    R.drawable.c2, R.drawable.c3,
   };
   @Override
   public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);
    gridview = (GridView) findViewById(R.id.gridview);
   gridview.setAdapter(new ImageAdapter(this));
   gridview.setOnItemClickListener(new OnItemClickListener() {
       public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
        //gridview.getId();
         imageView = (ImageView) v;
         Random r=new Random();
            int i=r.nextInt(16);
            Log.e("i",""+i);
          imageView.setImageResource(mThumbIds[i]);

          ImageAdapter im = (ImageAdapter)parent.getAdapter();


       }

      @Override
     public boolean onCreateOptionsMenu(Menu menu) {
      getMenuInflater().inflate(R.menu.activity_main, menu);
      return true;
     }



    public class ImageAdapter extends BaseAdapter {
      private Context mContext;

  // private GridItem[] items;


   public ImageAdapter(Context c) {
       mContext = c;
   }

   public int getCount() {
       return mThumbIds.length;
   }

   public Object getItem(int position) {
       return position;
   }

   public long getItemId(int position) {
       return position;
   }

   // create a new ImageView for each item referenced by the Adapter
   public View getView(int position, View convertView, ViewGroup parent) {
       ImageView imageView;
       if (convertView == null) {  // if it's not recycled, initialize some attributes
           imageView = new ImageView(mContext);
           imageView.setLayoutParams(new GridView.LayoutParams(40,40 ));
           imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
           imageView.setPadding(3, 3, 3, 3);
       } else {
           imageView = (ImageView) convertView;
       }

       Random r=new Random();
       int i=r.nextInt(5);

       imageView.setImageResource(mThumbIds[i]);
       return imageView;
     }


   }
    }
4

2 に答える 2

1

View クラスの set/getTag メソッドを使用します。任意のオブジェクトをビューにアタッチして、後で取得できます。

imageView.setImageResource(mThumbIds[i]);
imageView.setTag(mThumbIds[i]);

後で

Integer thumbId = (Integer)imageView.getTag();
于 2013-01-15T06:22:31.327 に答える
0

ベースアダプタ内のホルダーを使用して、セルを変更getview()し、セルにxmlを使用します

 public  class ViewHolder {
        ImageView img;
        }

 public View getView(int position, View convertView, ViewGroup parent) {
               ViewHolder holder;
               if(convertView==null){
                    holder=new ViewHolder();
                    LayoutInflater li = getLayoutInflater();
                    convertView = li.inflate(R.layout.list_item, null);
                    holder.img = (ImageView)convertView.findViewById(R.id.imgView);
                    convertView.setTag(holder); 
                  }
                else
                {
                    holder = (ViewHolder)convertView.getTag();
                }

   Random r=new Random();
   int i=r.nextInt(5);

   holder.img.setImageResource(mThumbIds[i]);//edited
   return convertView;
}

ViewHolderリサイクルを処理できます。セルの場合、XML実行時の柔軟性が向上し、複雑さや計算が少なくなります。

于 2013-01-15T08:03:11.887 に答える