在android中的drawable图像中设置名称或id

时间:2013-01-15 06:15:40

标签: android random android-gridview android-resources

我正在尝试使用gridView创建一个Android应用程序。在这个应用程序中,我试图随机添加图像到GridView。我有5张图片,这些图像像R.drawable.c0,R.drawable.c1一样被添加到drawable中,     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;
     }


   }
    }

2 个答案:

答案 0 :(得分:1)

使用View类的set / getTag方法。您可以将任何对象附加到视图并稍后检索它。

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

Integer thumbId = (Integer)imageView.getTag();

答案 1 :(得分: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用于您的细胞将在运行时为您提供更大的灵活性,减少并发症和计算。