2

以下是我的 ListActivity,onCreate 代码

public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            fakeTripBuilder();

            setContentView(R.layout.cutom_list_view);

            SimpleAdapter adapter = new SimpleAdapter(this, list, R.layout.custom_row_view, 
                    new String[] {"stop","distance","time","icon","mode"},
                    new int[] {R.id.text_stop,R.id.text_distance, R.id.text_time, R.id.icon, R.id.text_mode});

            populateList();
            setListAdapter(adapter);
}

在同一个类中我有以下方法

 @Override
       protected void onListItemClick(ListView l, View v, int position, long id){
           super.onListItemClick(l, v, position, id);
           Log.d("Travel","You choosed!");
           Object o = this.getListAdapter().getItem(position);
           Toast.makeText(this, "You Choosed"+o.toString(), Toast.LENGTH_LONG).show();
       }

这是“custom_list_view.xml”

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:clickable="false"
    android:gravity="center_horizontal|center_vertical"
    android:orientation="vertical" >
<ListView 
    android:id="@android:id/list"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#000fff"
    android:layout_weight="2"
    android:drawSelectorOnTop="false">
</ListView>
<TextView 
    android:id="@id/android:empty"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="#FFff00"
    android:text="No data"
/>
</LinearLayout>

问题是,当我点击它时不会调用 onListItemClick 方法。帮助 !!

4

4 回答 4

6

要在 ListActivity 中获取对 ListView 的引用,您应该调用:

ListView lv = getListView();

您不需要设置点击监听器,它已经有一个。只需覆盖:

 @Override
 public void onListItemClick(ListView l, View v, int position, long id) {
     Object item = lv.getAdapter().getItem(position);

 }

在你的 xml 文件中,ListView 应该有 id:

android:id="@android:id/list" 

编辑

你需要删除

android:clickable="false"

从布局中允许单击任何子视图

于 2012-04-24T14:04:04.210 回答
1

自从 2012 年提出这个问题以来,发生了很多变化。这是对已接受答案的更新

onItemClickListener在您的中使用ListActivity,只需覆盖如下onListItemClick(...)方法:

public void onListItemClick(ListView listView, View view, int position, long id) {
    ListView myListView = getListView();
    Object itemClicked = myListView.getAdapter().getItem(position);
    Toast.makeText(getApplicationContext(), "Item Clicked: " + item + " \nPosition: " + id,

    Toast.LENGTH_SHORT).show();
}

注意getItem()方法而不是getItemAtPosition()接受的答案

请记住:要使其正常工作,您需要有一个带有 id 的列表视图list,否则您的应用程序将崩溃。

  <ListView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/list"
    />
于 2015-02-23T19:29:08.593 回答
0

ListView lv = (ListView) findViewById(R.layout.cutom_list_view);

您应该使用 R.id.listview_id 代替,它应该在 R.layout.cutom_list_view 中定义

像这样:

<ListView
  android:id="@+id/listview_id"
  android:layout_width="match_parent"
  android:layout_height="wrap_content" >
</ListView>

编辑:

R.layout.cutom_list_view 是你的布局文件的 id,但是你应该通过它自己的 id 找到 listview,定义为 android:id="@+id/listview_id",所以 id 将是 R.id.listview_id

于 2012-04-24T13:58:07.657 回答
0

如果您想捕获列表中的点击事件,请尝试覆盖 onListItemClick 方法。

于 2012-04-24T13:58:17.120 回答