setOnItemClickListener在自定义ListView上
我有一个自定义的ListView
。 此ListView
包含1个图像和6个TextView 。 要检索我创build了setOnItemClickListener(...)
。 每当我点击ListView
,我怎么能从6个TextView中检索所有的数据呢?
示例代码:
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
应该包含listItem
的选定数据。
我也有同样的问题..如果我们从逻辑上思考一点,我们可以得到答案..它对我很好..我希望你会得到它..
-
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
,我们通过由onItemClick
方法返回的View
对象从TextView
获取文本。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(); } } );
如果在监听器中获得了项目的根布局(比如说itemLayout
),并且给textviews一些id,那么可以使用itemLayout.findViewById(R.id.textView1)
来获取它们。
如果它帮助任何人,我发现问题是我的布局文件(我夸大的ListView行)已经有一个android:onClick事件。 这取代了onItemClick事件。
如果上面的答案不起作用,也许你没有在自定义适配器的getItem方法中添加返回值看到这个问题,并检查出第一个答案。