Android에서 ListView 클릭을 처리하는 방법


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를 읽지 못했습니다. 고마워, Tee
teepusink

D : 저도 같은 teepusink로 한
Shereef Marzouk

그런 다음 어떻게 상세보기로 데이터를 보내나요? (YouTube가 비디오를 클릭하는 것처럼)
Sauron

먼저 클래스는 클릭 리스너를 구현해야합니다. OnItemClickListener를 구현합니다. 그런 다음 ListList에 리스너를 설정하십시오. 마지막으로 clic 메소드를 작성하십시오. @Override public void onItemClick (AdapterView <?> parent, View view, int position, long id) {Toast.makeText (MainActivity.this, ""+ countries [+ position]에서 클릭 함, Toast.LENGTH_SHORT) .show (); }
bourax 웹 마스터

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

1
@shinjin 최종 확인하십시오. final ListView lv = (ListView) findViewById(R.id.your_list_view);
Lekensteyn 2016 년

청결한 방법 :Object o = ((ListView)arg0).getItemAtPosition(position);
JimmyB

다음은 문서에 대한 링크입니다. developer.android.com/reference/android/widget/…
trinity420

42

어댑터 클래스 getView () 메소드에서 팽창 된보기를 "Clickable"및 "Click 이벤트를들을 수 있음"으로 설정해야합니다.

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를 참조하십시오.


감사 비제이 나는 당신의 대답에서 해결이 부풀려보기를 클릭 문제에 직면 한
dhaiwat

그러나 이것은 클릭되는 항목을 결정하지 않으므로 목록에 더 이상 쓸모가 없습니까? 옳은?
농장 타조

당신은 태그를 convertView로 설정하고 onClick.에서 동일하게 확인할 수 있습니다. 클릭 한 항목을 사용하여 태그를 식별 할 수 있습니다 ...
Vijay C

어댑터의 setOnClickListener 참조에서 태그보다 더 우아한 솔루션을 발견하고 onClick (View v) 메소드에서 호출했습니다. 활동은 위치와 함께 이벤트를 수신 할 수 있습니다.
jocelyn

onClick 메소드가 잘못되었습니다. onItemClick (AdapterView <?> 부모,보기, int 위치, 긴 id)
여야합니다.

17

내 앞의 두 가지 대답은 정확합니다 OnItemClickListener. 사용할 수 있습니다 .

이 노트에 좋은 사이의 차이 그 OnItemClickListenerOnItemSelectedListener미묘한 소리 동안 항목 선택과 집중이 당신의 터치 모드와 관련된으로, 사실 의미이다 AdapterView.

터치 모드에서는 기본적으로 선택 및 초점이 없습니다. 당신은 좀 걸릴 수 있습니다 여기에 주제에 대한 자세한 정보를 원하시면.


8

이 솔루션은 실제로 최소한의 코드이며 코드를 망치지 않습니다.

당신에 list_item.xml (! NOT 목록보기)를 할당 속성은 안드로이드 : 온 클릭을 다음과 같이 :

<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에서 java처럼 간단한 listView에 리스너를 추가하십시오.

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.