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行と列のあるボックスのように見えます。それ以外の場合は太い線のように表示されます。グリッドビューに何も入れないでください)

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

ビュー内のビューへの参照を作成し、これに一致するようにインデックスを並べ替える場合にのみ役立つため、このようなものには使用getChildAtが面倒な場合があります。GridViewこの道をさらに追求するために、あなたの他の人がどこに位置しているのか、私は十分に知りません.

しかし、とにかく、このようなことをする方法は、2 つのアダプター間の中間コレクションを作成することです。1 つのアダプターでは、インデックス付きコレクション内のすべてのタグが保持されているため、何らかのリーダー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 に答える