【发布时间】:2011-06-10 05:45:45
【问题描述】:
我有一个自定义ListView。这个ListView 包含 1 个 Image 和 6 个 TextView。为了检索值,我创建了一个setOnItemClickListener(...)。每当我点击ListView 时,我如何才能真正从 6 个 TextViews 中检索所有数据?
【问题讨论】:
我有一个自定义ListView。这个ListView 包含 1 个 Image 和 6 个 TextView。为了检索值,我创建了一个setOnItemClickListener(...)。每当我点击ListView 时,我如何才能真正从 6 个 TextViews 中检索所有数据?
【问题讨论】:
如果在侦听器中您获得了项目的根布局(例如 itemLayout),并且您为 textviews 提供了一些 id,那么您可以使用类似 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 的选定数据。
【讨论】:
我也有同样的问题。。 如果我们在逻辑上稍微思考一下,我们就能得到答案。 它对我很有用.. 我希望你能得到它..
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) -
当我们通过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();
}
}
);
【讨论】:
如果它对任何人有帮助,我发现问题是我的布局文件中已经有一个 android:onClick 事件(我为 ListView 行膨胀了)。这取代了 onItemClick 事件。
【讨论】:
如果上述答案不起作用,可能是您没有在自定义适配器的 getItem 方法中添加返回值,请参阅this 问题并查看第一个答案。
【讨论】:
很抱歉使用 Kotlin 进行编码。 但我遇到了同样的问题。 我用下面的代码解决了。
list.setOnItemClickListener{ _, view, _, _ ->
val text1 = view.find<TextView>(R.id.~~).text
}
你可以在“~~”中放一个显示你想要的TextView的id。
希望对某人有所帮助!
【讨论】: