如何从 ListActivity 获取 onListItemClick 中的控件
Posted
技术标签:
【中文标题】如何从 ListActivity 获取 onListItemClick 中的控件【英文标题】:How could I get the controls in onListItemClick from ListActivity 【发布时间】:2011-10-06 12:57:24 【问题描述】:我在 android 项目中有 ListActivity。其代码:
public class ListActivityApp extends ListActivity
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.list);
ArrayList<HashMap<String, String>> listItem = new ArrayList<HashMap<String, String>>();
HashMap<String, String> map;
map = new HashMap<String, String>();
map.put("title", "my note");
map.put("img", String.valueOf(R.drawable.paper));
listItem.add(map);
map = new HashMap<String, String>();
map.put("title", "second");
map.put("img", String.valueOf(R.drawable.paper));
listItem.add(map);
map = new HashMap<String, String>();
map.put("title", "cos tam");
map.put("img", String.valueOf(R.drawable.paper));
listItem.add(map);
SimpleAdapter myAdapter = new SimpleAdapter (this.getBaseContext(), listItem, R.layout.list,
new String[] "img", "title", new int[] R.id.img, R.id.title);
setListAdapter(myAdapter);
@Override
protected void onListItemClick(ListView l, View v, int position, long id)
super.onListItemClick(l, v, position, id);
String selection = getListAdapter().getItem(position).toString();
Toast.makeText(this, selection, 0).show();
我的 list.xml:
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_
android:layout_
>
<ListView
android:id="@android:id/list"
android:layout_
android:layout_
/>
<TextView
android:id="@android:id/empty"
android:layout_
android:layout_
android:text="Empty"
/>
还有我的 item.xml:
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_
android:layout_
>
<ImageView
android:id="@+id/img"
android:layout_
android:layout_
/>
<TextView android:id="@+id/title"
android:layout_
android:layout_
/>
</LinearLayout>
我遇到的第一个问题(已解决):在模拟器上,我可以看到三个带有文本“Empty”的 TextView,但是当我单击它们中的每一个时,我可以看到带有正确“标题”的 Toast。我做错了什么?在另一个项目中它工作正常。 - 我已经解决了这个问题。在此:
SimpleAdapter myAdapter = new SimpleAdapter (this.getBaseContext(), listItem, R.layout.list, new String[] "img", "title", new int[] R.id.img, R.id.title);
我应该作为第三个参数使用 R.layout.item,而不是 R.layout.list。
第二个问题:如何在onListItemClick(..)方法中获取我的列表项的Object?我当然有职位和身份。 l.getItemAtPosition(位置) getListAdapter().getItem(位置) 这些方法返回所有项目(在我的例子中是 img 和 title)。例如,如何更改 TextView 中的文本或在 onListItemClick(..) 中设置我的 ImageView 不可见?
【问题讨论】:
我可以通过这种方式从 TextView 中获取文本:HashMap<String, String> map = new HashMap<String, String>(); map = (HashMap<String, String>) getListAdapter().getItem(position); String temp = (String) map.get("title");
但我不能做例如:TextView tv = (TextView) map.get("title");
来更改文本。如何从 ListActivity 修改 ListView 中的现有控件?
【参考方案1】:
要从单击的项目中获取文本视图和图像视图,请使用在 onClick() 事件中提供给您的视图 v 并执行以下操作:
TextView tv = (TextView)v.findViewById(R.id.textview);
tv.setText("example text");
ImageView image = (ImageView)v.findViewById(R.id.image);
image.setVisibility(ImageView.INVISIBLE);
【讨论】:
以上是关于如何从 ListActivity 获取 onListItemClick 中的控件的主要内容,如果未能解决你的问题,请参考以下文章
如何将复选框添加到 ListActivity 而不会丢失 onListItemClick 功能?
如何为 ListActivity 的 Listeview 项捕获长按事件?
Android ListActivity - 如何在 ListView 下方添加视图?
GridView 与 ListActivity 而不是 ListView