1

私のアプリには、異なるアダプターを持つ2つの10x10グリッドがあります。最初のグリッドのアイテムをクリックすると、最初のグリッドと2番目のグリッドの両方でグラフィックが変更されます。

battleField = (GridView) findViewById(R.id.gridView1);
battleField2 = (GridView) findViewById(R.id.gridView2);
battleField.setAdapter(new ImageAdapter(getApplicationContext()));
battleField2.setAdapter(new ImageAdapter2(getApplicationContext()));
battleField2.setEnabled(false);
battleField.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View view1, int position, long id) {
        Toast.makeText(SendobjectActivity.this, "" + position, Toast.LENGTH_SHORT).show();
        ImageView img = (ImageView)view1;
        img.setImageResource(R.drawable.trafiony1);                           
        //HERE IS THE PROBLEM
        battleField2.performItemClick(view2, position, id);

    }
});

battleField2.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View view2, int position, long id) {
        Toast.makeText(SendobjectActivity.this, "" + position, Toast.LENGTH_SHORT).show();                       
        ImageView img2 = (ImageView)view2;
        img2.setImageResource(R.drawable.trafiony2);
    }
});

両方のグリッドにonItemClickListenerを実装しました。最初のグリッドのアイテムがクリックされると、グラフィックが変更され、idはperformItemClickメソッドを呼び出して2番目のグリッドで同じことを行います。残念ながら、2番目のグリッドを表示する方法がわかりません。何か案は?

4

1 に答える 1

1

直接ジョブを実行するのではなく、個別のメソッドにジョブを委任し、onClickListenerこれらのメソッドを呼び出します。たとえば、次の代わりに:

battleField2.setOnItemClickListener(new OnItemClickListener() {
  public void onItemClick(AdapterView<?> parent, View view2, int position, long id) {
    Toast.makeText(SendobjectActivity.this, "" + position,
               Toast.LENGTH_SHORT).show();                       
    ImageView img2 = (ImageView)view2;
    img2.setImageResource(R.drawable.trafiony2);
  }
});

次のようにします。

battleField2.setOnItemClickListener(new OnItemClickListener() {
  public void onItemClick(AdapterView<?> parent, View view2, int position, long id) {
    doTheJob( parent, view2, position, id );
  }
});

protected void doTheJob(AdapterView<?> parent, View view2, int position, long id) {
    Toast.makeText(SendobjectActivity.this, "" + position,
               Toast.LENGTH_SHORT).show();                       
    ImageView img2 = (ImageView)view2;
    img2.setImageResource(R.drawable.trafiony2);
}

他のリスナーについても同じです。次に、両方のジョブを実行する必要がある場合は、対応するメソッドを呼び出すだけです。

または(可能であれば)リスナーを1つに変えます。

于 2012-11-26T09:59:43.917 に答える