У меня есть пользовательский ListView
. Это ListView
содержит 1 Изображение и 6 TextView s. Чтобы получить значение, я создал setOnItemClickListener(...)
. Всякий раз, когда я нажимаю на ListView
, как я могу получить все данные из 6 TextView?setOnItemClickListener on custom ListView
ответ
Если в слушателе вы получаете корневую компоновку предмета (скажем, itemLayout
), и вы дали некоторые идентификаторы текстовым изображениям, вы можете получить их с чем-то вроде itemLayout.findViewById(R.id.textView1)
.
Пример кода:
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
.
ребята, я не могу ощутить прикосновение, даже если я напишу тост внутри onItemНажмите, что он не показывает – abhishek
@abhishek, с той же проблемой со мной также –
Я тоже был тот же проблема .. Если мы думаем, что логически немного мы можем получить ответ .. Он работал для меня очень хорошо .. я надеюсь, и будет получать его ..
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" />
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>
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(); } } );
У меня такой же код, но он не будет работать для меня –
Если это помогает любому, я обнаружил, что проблема была у меня уже была андроида : событие onClick в моем файле макета (который я надул для строк ListView). Это заменило событие onItemClick.
Если выше ответы не работают, возможно, вы не добавили возвращаемого значения в метод getItem в пользовательском адаптере, см. Вопрос this и проверьте первый ответ.
Спасибо большое. – kangalert
@kangalert, пожалуйста.не забудьте отметить принятые ответы (нажмите галочку рядом с ответом), чтобы люди знали, что это рабочее решение. он также повышает вашу репутацию и ответчика :) – bigstones