2012-04-25 21 views
2

タイトルが大丈夫かどうかはわかりませんが、私はそれをよりよく説明しようとします。myActivity extends GridViewがOnClickListenerを実装しています

レイアウトにグリッドを表示したいとします。これを行うには、私はカスタムArrayAdapterを使用しています。 各アイテムにonClickListenerを設定する方法はありません。

レイアウトには、名前を表示するラベルとグリッドビューが含まれています。

これが私の活動です:

public class Sala extends Activity{ 
GridView gridView; 
TextView label_name; 

ArrayList<String> lista_opciones = new ArrayList<String>(); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.layout_sala); 
    //Refresh the name in the label 
    Bundle bundle=getIntent().getExtras(); 
    String name= bundle.getString("name"); 
    label_name= (TextView) findViewById(R.id.label_name); 
    label_name.setText(name); 

    //Loading array 
    lista_op.add("Op 1"); 
    lista_op.add("Op 2"); 
    lista_op.add("Op 3"); 
    lista_op.add("Op 4"); 

    //AdaptadorOpciones 
    ArrayAdapterOpciones mAdapter = new ArrayAdapterOptions(this,lista_op); 

    //Set the customAdapter to the grid 
    gridView = (GridView) findViewById(R.id.grid); 
    gridView.setAdapter(mAdapter); 
} 

}

魔女の方法は、私は、各項目にonClickListenerを実装するためにオーバーライドする必要がありますか? GridViewの項目をクリックするため

答えて

4

impllementのsetOnItemClickListener:あなたのAdapter.getView実装でリスナーを追加することができ

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.layout_sala); 
    //Refresh the name in the label 
    Bundle bundle=getIntent().getExtras(); 
    String name= bundle.getString("name"); 
    label_name= (TextView) findViewById(R.id.label_name); 
    label_name.setText(name); 

    //Loading array 
    lista_op.add("Op 1"); 
    lista_op.add("Op 2"); 
    lista_op.add("Op 3"); 
    lista_op.add("Op 4"); 

    //AdaptadorOpciones 
    ArrayAdapterOpciones mAdapter = new ArrayAdapterOptions(this,lista_op); 

    //Set the customAdapter to the grid 
    gridView = (GridView) findViewById(R.id.grid); 
    gridView.setAdapter(mAdapter); 
    gridView.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 

       //Do stuff here 
      } 
     }); 
} 
+0

私は、それがコンパイルされることを試みたが、inItemClickメソッドに実行したことがありません。 – dnaranjo

+0

コントロールが項目クリックリスナーに入力されていない場合、レイアウト内でクリック可能をtrueに設定している可能性があります。レイアウトからすべてのビューからクリック可能なものを削除してから、試してみてください。 –

+0

私はそれをチェックしましたが、layout_adapter(メインのもの)でもlayout_adapterでもクリック可能な属性はtrueに設定されていません – dnaranjo

0

は:

@Override  
    public View getView(int position, View convertView, ViewGroup parent) { 
     ImageView button = (ImageView) convertView; 
     if (button == null) { 
      button = new ImageButton(); // or whatever 
      button.setOnClickListener(this); 
     } 
     button.setId(ids_present.get(position)); 
     return button; 
    } 
関連する問題