Android:如何通过with-in获取网格视图项Tag的位置另一个网格视图的set-on-item-click监听器功能?

时间:2012-12-22 11:53:04

标签: java android

如何根据其位置获取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.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]); 
        }
});

2 个答案:

答案 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中使用该变量。