Androidでリストビューのクリックを処理する方法


141

ListViewでクリックイベントをリッスンするにはどうすればよいですか?

これは私が今持っているものです

ListView list = (ListView)findViewById(R.id.ListView01);  
...  
list.setAdapter(adapter);  

次の場合

list.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {  
   public void onItemSelected(AdapterView parentView, View childView, 
                                                         int position, long id) 
   {  
       setDetail(position);  
   }

   public void onNothingSelected(AdapterView parentView) {  

   }  
});  

クリックしても何も起こらないようです。
そして、それらすべてのコードは、Activityを拡張するクラス内にあります。

回答:


182

リストビューでは、 setOnItemClickListener


デビッドに感謝します。Geezzz、私はsetOnClickListenerとsetOnItemSelectedListenerを試しましたが、setOnItemClickListenerの読み取りに失敗しました。おかげで、ティー
teepusink

私はteepusinkと同じことをした:D
Shereef Marzouk '18

次に、その詳細ビューにデータをどのように送信しますか?(YouTubeが動画にクリックスルーするように)
サウロン

まず、クラスはクリックリスナを実装する必要があります。implements OnItemClickListener次に、リスナーをListView yourList.setOnItemclickListener(this);に設定します。最後に、clicメソッドを作成します。@Override public void onItemClick(AdapterView <?> parent、View view、int position、long id){Toast.makeText(MainActivity.this、 "You Clicked at" + countries [+ position]、 Toast.LENGTH_SHORT).show(); }
bouraxウェブマスター2014

88

ListViewオブジェクトがlvだとすると、次のようにします-

lv.setClickable(true);
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {

  @Override
  public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {

    Object o = lv.getItemAtPosition(position);
    /* write you handling code like...
    String st = "sdcard/";
    File f = new File(st+o.toString());
    // do whatever u want to do with 'f' File object
    */  
  }
});

1
lv内部ではアクセスできませんonItemClick。それを回避する良い方法は何ですか?
shinjin 2014

1
@shinjin最終的にする。final ListView lv = (ListView) findViewById(R.id.your_list_view);
Lekensteyn 2014年

クリーンな方法:Object o = ((ListView)arg0).getItemAtPosition(position);
JimmyB 2015年

ここではドキュメントへのリンクは次のとおりです。developer.android.com/reference/android/widget/...
trinity420は

42

アダプタークラスのgetView()メソッドで、インフレータブルビュー「クリック可能」および「クリックイベントをリッスン可能」を設定する必要があります。

convertView = mInflater.inflate(R.layout.list_item_text, null);
convertView.setClickable(true);
convertView.setOnClickListener(myClickListener);

次のように、ListActivityでクリックリスナーを宣言します。

public OnClickListener myClickListener = new OnClickListener() {
public void onClick(View v) {
                 //code to be written to handle the click event
    }
};

これは、BaseAdapterを拡張してアダプタをカスタマイズする場合にのみ当てはまります。

詳細については、ANDROID_SDK / samples / ApiDemos / src / com / example / android / apis / view / List14.javaを参照してください


おかげでVijay私はあなたの答えから解決した
インフレート

しかし、これはどの項目がクリックされているかを決定しないので、リストにとってそれは多かれ少なかれ役に立たなくなりますか?正しい?
ファームダチョウ

タグをconvertViewに設定して、onClickで同じようにチェックできます。タグを使用して、クリックされたアイテムを識別できます...
Vijay C

アダプターのタグよりもエレガントなソリューションを見つけ、setOnClickListener参照を保存して、onClick(View v)メソッドで呼び出します。次に、アクティビティはイベントを位置とともに受け取ることができます。
jocelyn

onClickメソッドが間違っています。onItemClick(AdapterView <?> parent、View view、int position、long id)
IgorGanapolsky 2013年

17

私の前の2つの答えは正しいです-あなたは使うことができますOnItemClickListener

アイテムの選択とフォーカスはのタッチモードに関連しているため、微妙に聞こえますが、OnItemClickListenerとの違いOnItemSelectedListenerは実際には重要AdapterViewです。

デフォルトでは、タッチモードでは、選択やフォーカスはありません。この件について詳しくは、こちらご覧ください。


8

このソリューションは本当に最小限であり、コードを台無しにすることはありません。

あなたにlist_item.xml(!NOTリストビュー)属性を割り当てるアンドロイド:のonClickこのように:

<RelativeLayout android:onClick="onClickDoSomething">

そしてあなたの活動でこのメソッドを呼び出します:

public void onClickDoSomething(View view) {
   // the view is the line you have clicked on
}

良い解決策ですが、クリックされたアイテムの位置を取得する方法はありません
BilalŞimşek

@BilalŞimşek私は長い間Androidをview利用していませんでしたが、メタデータがいくつかある場合は、位置を取得する方法である可能性があります。
Amio.io

6

あなたはsetOnItemClickListener誰かが言ったを使用する必要があります。
コードは次のようになります。

listView.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        // When clicked, show a toast with the TextView text or do whatever you need.
        Toast.makeText(getApplicationContext(), ((TextView) view).getText(), Toast.LENGTH_SHORT).show();
    }
});

5

まず、クラスはクリックリスナを実装する必要があります。

implements OnItemClickListener

次に、リスナーをListViewに設定します。

yourList.setOnItemclickListener(this);

そして最後に、clicメソッドを作成します。

@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
Toast.makeText(MainActivity.this, "You Clicked at " +countries[+ position], Toast.LENGTH_SHORT).show();
}

ここを見て、コードをダウンロードできます


3

アクティビティでsetOnItemClickListener()APIを使用します。以下はサンプルです。

listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){

@Override
public void onItemClick(AdapterView<> parent, View view, int position, long id)
{
     // your code here.
}

});

1

Kotlinで、listViewにリスナーをJavaと同じくらい簡単に追加します。

your_listview.setOnItemClickListener { parent, view, position, id ->   

    Toast.makeText(this, position, Toast.LENGTH_SHORT).show()

 }
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.