2011-01-17 3 views
19

У меня есть пользовательский ListView. Это ListView содержит 1 Изображение и 6 TextView s. Чтобы получить значение, я создал setOnItemClickListener(...). Всякий раз, когда я нажимаю на ListView, как я могу получить все данные из 6 TextView?setOnItemClickListener on custom ListView

ответ

2

Если в слушателе вы получаете корневую компоновку предмета (скажем, itemLayout), и вы дали некоторые идентификаторы текстовым изображениям, вы можете получить их с чем-то вроде itemLayout.findViewById(R.id.textView1).

+0

Спасибо большое. – kangalert

+0

@kangalert, пожалуйста.не забудьте отметить принятые ответы (нажмите галочку рядом с ответом), чтобы люди знали, что это рабочее решение. он также повышает вашу репутацию и ответчика :) – bigstones

52

Пример кода:

ListView list = (ListView) findViewById(R.id.listview); 
list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     Object listItem = list.getItemAtPosition(position); 
    } 
}); 

В примере кода выше, listItem должен содержать выбранные данные для textView.

+3

ребята, я не могу ощутить прикосновение, даже если я напишу тост внутри onItemНажмите, что он не показывает – abhishek

+0

@abhishek, с той же проблемой со мной также –

10

Я тоже был тот же проблема .. Если мы думаем, что логически немного мы можем получить ответ .. Он работал для меня очень хорошо .. я надеюсь, и будет получать его ..

  1. listviewdemo.xml

    <ListView 
        android:id="@+id/listview" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        android:paddingBottom="30dp" 
        android:paddingLeft="10dp" 
        android:paddingRight="10dp" /> 
    

  2. listviewcontent.xml - отмечают, что TextView - android:id="@+id/txtLstItem"

    <LinearLayout 
        android:id="@+id/listviewcontentlayout" 
        android:layout_width="0dp" 
        android:layout_height="fill_parent" 
        android:layout_weight="1" 
        android:orientation="horizontal"> 
    
        <ImageView 
         android:id="@+id/img1" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:layout_marginRight="6dp" /> 
    
        <LinearLayout 
         android:layout_width="0dp" 
         android:layout_height="fill_parent" 
         android:layout_weight="1" 
         android:orientation="vertical"> 
    
         <TextView 
          android:id="@+id/txtLstItem" 
          android:layout_width="match_parent" 
          android:layout_height="wrap_content" 
          android:gravity="left" 
          android:shadowColor="@android:color/black" 
          android:shadowRadius="5" 
          android:textColor="@android:color/white" /> 
    
        </LinearLayout> 
    
        <ImageView 
         android:id="@+id/img2" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:layout_marginRight="6dp" /> 
    </LinearLayout> 
    

  3. ListViewActivity.java - Обратите внимание, чтоview.findViewById(R.id.txtLstItem) - как установить значение для TextView по setText() методу мы получать текст от TextView от View объект был добавлен onItemClick способ. OnItemClick() возвращает текущий вид.

    TextView v=(TextView) view.findViewById(R.id.txtLstItem); 
    Toast.makeText(getApplicationContext(), "selected Item Name is "+v.getText(), Toast.LENGTH_LONG).show();** 
    

    Используя эту простую логику, мы можем получить другие значения, как CheckBox, RadioButton, ImageView и т.д.

    ListView List = (ListView) findViewById(R.id.listview); 
    cursor = cr.query(CONTENT_URI,projection,null,null,null); 
    adapter = new ListViewCursorAdapter(ListViewActivity.this, R.layout.listviewcontent, cursor, from, to); 
    
    cursor.moveToFirst(); 
    
    // Let activity manage the cursor 
    startManagingCursor(cursor); 
    
    List.setAdapter(adapter); 
    List.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
         @Override 
         public void onItemClick (AdapterView <?> adapter, View view,int position, long arg){ 
          // TODO Auto-generated method stub 
          TextView v = (TextView) view.findViewById(R.id.txtLstItem); 
          Toast.makeText(getApplicationContext(), "selected Item Name is " + v.getText(), Toast.LENGTH_LONG).show(); 
         } 
        } 
    ); 
    
+0

У меня такой же код, но он не будет работать для меня –

2

Если это помогает любому, я обнаружил, что проблема была у меня уже была андроида : событие onClick в моем файле макета (который я надул для строк ListView). Это заменило событие onItemClick.

1

Если выше ответы не работают, возможно, вы не добавили возвращаемого значения в метод getItem в пользовательском адаптере, см. Вопрос this и проверьте первый ответ.