2011-12-23 19 views
32

これは、リストを生成しますArrayAdapterでonClickListenerを設定するにはどうすればよいですか?

// All necessary imports are here 

public class More extends Activity { 

    String[] MoreItems = { "Transfers", "Budgets", "Branches", "Tools", "News", 
      "Customer Service", "Settings", "Help", "About" }; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.more_view); 

     ListView moreListView = (ListView) findViewById(R.id.moreListView); 
     MoreListAdapter listAdapter = new MoreListAdapter(); 
     moreListView.setAdapter(listAdapter); 

     // accountsTypeListView.setOnItemClickListener(listClickListner); 
    } 

    class MoreListAdapter extends ArrayAdapter<String> { 
     MoreListAdapter() { 
      super(More.this, R.layout.list_item, MoreItems); 
     } 

     public View getView(int position, View convertView, ViewGroup parent) { 
      View row; 

      if (convertView == null) { 
       LayoutInflater inflater = getLayoutInflater(); 
       row = inflater.inflate(R.layout.list_item, parent, false); 
      } else { 
       row = convertView; 
      } 
      TextView tv = (TextView) row.findViewById(R.id.textItem); 

      tv.setText(getItem(position)); 

      return row; 
     } 
    } 
} 

以下のようにのように私はクラスを作ってるんだ、私は、ユーザーのクリック転送する場合のように、それぞれのクリックで、それぞれの活動を呼びたい、それが転送アクティビティが表示されます、 はどのように呼び出すことができますこのリストのonClickListenerと、クリック時のアクティビティの開始方法を教えてください。

+0

あなたはあなたのリストビューの各項目にまたはのTextViewsためOnClickListenerを設定したいです各アイテムまたは何? – Houcine

+0

row.setOnClickListener(this); ..... startActivity(これ、someIntent); – Blundell

答えて

39

あなたも、このように行うことができます。..

moreListView.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
        long arg3) { 
       // TODO Auto-generated method stub 
       Log.d("############","Items " + MoreItems[arg2]); 
      } 

     }); 
+2

アダプターをmoreListView.setAdapter(listAdapter)に設定した場所の直下に配置します。 – localhost

+0

偉大な.. :)本当にうまくいった..おかげで.. – Lal

1

あなたの「もっと」クラスではなく、活動のListActivityを拡張するために持っている、あなたはonListItemClick上書きすることができ

@Override 
protected void onListItemClick(ListView l, View v, int position, long id) { 
    super.onListItemClick(l, v, position, id); 
    //do something here using the position in the arrya 
} 

編集:アンドロイド:はあなたのListViewを呼び出す必要があります。レイアウトで、言うことを忘れたのid =「@アンドロイド:ID /リスト」

+0

と各アイテムにonClickリスナーを設定する方法は? –

+0

すべての商品がクリックを受け取ります。クリックされたアイテムの位置を使用しているものを知っているだけです。 MoreItems [ポジション] – Johann

+0

とonclicklistnerを実装する必要がありますか? –

45

各イベントをクリック対処するには、2つのオプションがあります。行。

1)クラスがListActivityまで拡張されている場合は、次のメソッドをオーバーライドできます。

@Override 
protected void onListItemClick(ListView l, View v, int position, long id) { 
    super.onListItemClick(l, v, position, id); 
    //do something here using the position in the array 
} 

2)は、ハンドル例えばgetView()方法

row.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 

    } 
}); 
+3

+1 - 両方のシナリオを考えると.. !! –

+0

onclickメソッド内でインテントを呼び出しながら、リストビューで検索/リフレッシュされた項目のonclikの後に2番目のメソッドがクラッシュします。そのための解決策は?私たちが独自の検索フィルターを使用すると問題が発生します。 –

+0

@Subraコードなしで誰もあなたの問題を理解することはできません。あなたは必要なコードで新しい質問をしてください。 – Dharmendra

10

内の行のイベントをクリックしてください:

ListView lv = getListView(); 

     lv.setAdapter(listAdapter); 

     lv.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View view,int position, long id) { 

       Intent i = new Intent(More.this, NextActvity.class); 
       //If you wanna send any data to nextActicity.class you can use 
       i.putExtra(String key, value.get(position)); 

      startActivity(i); 
      } 
      }); 
関連する問題