如何在List活动中实现onItemClickListener

时间:2012-04-24 13:55:43

标签: android android-layout

以下是我的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 个答案:

答案 0 :(得分: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"
从布局中

以允许点击任何子视图

答案 1 :(得分: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"
    />

答案 2 :(得分: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 < / p>

答案 3 :(得分:0)

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