1

如何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     
    }  
});

MYgridview1.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;

}

网格视图2

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]); 
        }
});
4

2 回答 2

0

usinggetChildAt对于这样的事情可能太麻烦了,因为它仅用于引用视图中的视图并重新排序其索引以匹配它。我不知道你的其他人在哪里GridView进一步追求这条道路。

但无论如何,我会做这样的事情的方式是在两个适配器之间建立一个中间集合。就像在一个适配器中将所有标签保存在索引集合中一样,然后您可以制作某种阅读器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];
}

我至少希望这个想法能够被理解,以便您可以修改它,但是对于如何修改和访问您的对象是实用的。

于 2012-12-22T14:41:40.380 回答
0

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

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

于 2012-12-24T13:40:05.987 回答