Android:如何通过with-in获取网格视图项Tag的位置另一个网格视图的set-on-item-click监听器function?

如何通过其位置获取grid-view的项目标记,并且必须从另一个grid-view的项目单击侦听器function获取。

 gridview2.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView parent, View v, int position, long id) { int i=(Integer)gridview1.getChildAt(gridview1s_position).getTag();---> it is returning Null } }); 

我的gridview1.setOnitemClicklistenergridview2.setonitemclicklistener在同一个文件中( MainActivity.java

gridview1适配器是一个ImageAdapter.java (用于设置gridview1中的图像), gridview2适配器是imageadapter2.java (这是用于设置黑色图像,以便gridview2看起来像一个包含行和列的框,否则它是显示像粗线,因为我们没有在gridview中放任何东西)

 gridview1.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView parent, View v,int position, long id) { int tag=(Integer)gridview1.getChildAt(position).getTag();//this returning the tag } }); 

ImageAdapter1.java

  public View getView(int arg0, View arg1, ViewGroup arg2) { // TODO Auto-generated method stub if(arg1!=null) { imv=(ImageView)arg1; } else { imv=new ImageView(cont); imv.setLayoutParams(new GridView.LayoutParams(40,40)); imv.setScaleType(ScaleType.CENTER_CROP); imv.setPadding(0,0,0,0); } imv.setImageResource(imageid[arg0]);//imageid aray is having drawable images imv.setTag(imageid[arg0]); return imv; } 

gridview2

 gridview2.setOnItemClickListener(new OnItemClickListener() { ImageAdapter ia=new ImageAdapter(getApplicationContext()); public void onItemClick(AdapterView parent, View v,int position, long id) { ImageView imv; if(v!=null) { imv=(ImageView)v; } else { imv=new ImageView(getApplicationContext()); imv.setLayoutParams(new GridView.LayoutParams(40,40)); imv.setScaleType(ScaleType.CENTER_CROP); imv.setPadding(0,0,0,0); imv.setBackgroundColor(5555); } imv.setImageResource(ia.imageid[tt]); } }); 

使用getChildAt对于类似的东西来说可能太麻烦了,因为它只对引用视图中的视图有用,并重新排序其索引以匹配它。 我不太了解你的其他GridView的位置,以进一步追求这一途径。

但无论如何,我做这样的事情的方式是在两个适配器之间进行中间收集。 因为在一个适配器中保存索引集合中的所有标记,然后您可以使用某种类型的reader get方法。 至少,这种做法会让我放心。

 gridview2.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView parent, View v, int position, long id) { int i = gridview1.getTagFromPosition(position); } }); 

然后在gridView1适配器中的类似于:

 private int[] tagCollection; @Override public View getView(int position, View convertView, ViewGroup parent) { // ..... convertView.setTag(tagCollection[position]); return convertView; } public int getTagFromPosition(int position) { return tagCollection[position]; } 

我至少希望这个想法得以实现,以便您可以对其进行修改,但是对于如何修改和访问对象非常实用。

最后,我自己得到了我的问题的解决方案。感谢所有提出宝贵建议的人。

我将grid-view1的特定单元格的标记保存在变量中,并在grid-view2中使用该变量。