自定义 ListView 上的 setOnItemClickListener
Posted
技术标签:
【中文标题】自定义 ListView 上的 setOnItemClickListener【英文标题】:setOnItemClickListener on custom ListView 【发布时间】:2011-06-10 05:45:45 【问题描述】:我有一个自定义ListView
。这个ListView
包含 1 个 Image 和 6 个 TextView。为了检索值,我创建了一个setOnItemClickListener(...)
。每当我点击ListView
时,我如何才能真正从 6 个 TextViews 中检索所有数据?
【问题讨论】:
【参考方案1】:如果在侦听器中您获得了项目的根布局(例如 itemLayout
),并且您为 textviews 提供了一些 id,那么您可以使用类似 itemLayout.findViewById(R.id.textView1)
的内容来获取它们。
【讨论】:
非常感谢各位大佬。 @kangalert 不客气。请记住标记已接受的答案(单击答案旁边的复选标记),让人们知道这是一个有效的解决方案。它还提高了您和回答者的声誉:)【参考方案2】:示例代码:
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
的选定数据。
【讨论】:
伙计们,即使我在 onItemClick 中写了一个 toast,我也无法感觉到触摸它没有显示 @abhishek ,我也有同样的问题【参考方案3】:我也有同样的问题。。 如果我们在逻辑上稍微思考一下,我们就能得到答案。 它对我很有用.. 我希望你能得到它..
listviewdemo.xml
<ListView
android:id="@+id/listview"
android:layout_
android:layout_
android:paddingBottom="30dp"
android:paddingLeft="10dp"
android:paddingRight="10dp" />
listviewcontent.xml
- 注意TextView
- android:id="@+id/txtLstItem"
<LinearLayout
android:id="@+id/listviewcontentlayout"
android:layout_
android:layout_
android:layout_weight="1"
android:orientation="horizontal">
<ImageView
android:id="@+id/img1"
android:layout_
android:layout_
android:layout_marginRight="6dp" />
<LinearLayout
android:layout_
android:layout_
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:id="@+id/txtLstItem"
android:layout_
android:layout_
android:gravity="left"
android:shadowColor="@android:color/black"
android:shadowRadius="5"
android:textColor="@android:color/white" />
</LinearLayout>
<ImageView
android:id="@+id/img2"
android:layout_
android:layout_
android:layout_marginRight="6dp" />
</LinearLayout>
ListViewActivity.java
- 注意 view.findViewById(R.id.txtLstItem)
-
当我们通过setText()
方法将值设置为TextView
时,我们通过View
方法从TextView
获取文本,该对象由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();
);
【讨论】:
【参考方案4】:如果它对任何人有帮助,我发现问题是我的布局文件中已经有一个 android:onClick 事件(我为 ListView 行膨胀了)。这取代了 onItemClick 事件。
【讨论】:
【参考方案5】:如果上述答案不起作用,可能是您没有在自定义适配器的 getItem 方法中添加返回值,请参阅this 问题并查看第一个答案。
【讨论】:
【参考方案6】:很抱歉使用 Kotlin 进行编码。 但我遇到了同样的问题。 我用下面的代码解决了。
list.setOnItemClickListener _, view, _, _ ->
val text1 = view.find<TextView>(R.id.~~).text
你可以在“~~”中放一个显示你想要的TextView的id。
希望对某人有所帮助!
【讨论】:
以上是关于自定义 ListView 上的 setOnItemClickListener的主要内容,如果未能解决你的问题,请参考以下文章
带有 RadioButton 单选的自定义 ListView
listview中的item是自定义的含有textview和edittext 还有button 点击listview外的按钮增加一个item问题