如何从 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&lt;String, String&gt; map = new HashMap&lt;String, String&gt;(); map = (HashMap&lt;String, String&gt;) 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

onListItemClick 不会(总是)被 ListActivity 调用

列表数据更改时更新Android ListActivity?