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.setOnitemClicklistener
和gridview2.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中使用该变量。