如何获得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.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];
}


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

09-10 02:05
查看更多