如何根据其位置获取grid-view
项标记,并且必须从另一个grid-view
项目点击监听器功能获取。
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]);
}
});
答案 0 :(得分:0)
使用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];
}
我至少希望这个想法得以实现,以便您可以对其进行修改,但是对于如何修改和访问对象非常实用。
答案 1 :(得分:0)
最后我自己得到了我的问题的解决方案。感谢所有提出宝贵建议的人。
我将grid-view1的粒子单元格的标记保存在变量中,并在grid-view2中使用该变量。