如何获得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
}
});
MY
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];
}
我至少希望能想到这个想法,以便您可以对其进行修改,但是对于如何修改和访问对象是实用的。