列表活动onListItemClick不会触发

时间:2014-02-02 17:57:56

标签: java android android-listview listactivity

我需要点击列表活动中的项目来执行某些操作,但它无法正常工作 我搜索这个问题并看到了一些关于此的答案,如:

android:focusable="false"
android:clickable="false"
android:focusableInTouchMode="false"

android:descendantFocusability="afterDescendants"
android:descendantFocusability="beforeDescendants"
android:descendantFocusability="blockDescendants"

但那些没有用

这是我的listActivity:

public class TrainListActivity extends SherlockListActivity
{
public static String varStart = "com.example.traininfo.startcity";
public static String varDestination = "com.example.traininfo.destinationcity";
private String start;
private String destination;

 ArrayList<TrainType> trains;

@Override
protected void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_trainlist);

    Log.i("SearchTrain", "try to get extras...");
    start = getIntent().getExtras().getString(varStart);
    destination = getIntent().getExtras().getString(varDestination);

    TrainController tc = new TrainController(this);
    trains = new ArrayList<TrainType>();
    trains = tc.getTrainList(start, destination).getTrain();
    Log.i("SearchTrain", "got the train list...");

    TrainListAdapter adapter = new TrainListAdapter(this, trains);
    Log.i("SearchTrain", "adapter initialized successfully!!");
    setListAdapter(adapter);
  }

@Override
 protected void onListItemClick(ListView l, View v, int position, long id) 
{
         // I want to do something here :(
    super.onListItemClick(l, v, position, id);
    Log.i("trainList", "on click");


}

}

行xml文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#27ae60"
    android:paddingBottom="5dp"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:clickable="true" >

<TextView
    android:id="@+id/tvTrainName"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:gravity="center"
    android:text="@string/resultTrainName"
    android:textColor="@android:color/white"
    android:textSize="20sp"
    android:focusable="false"
    android:clickable="false"
    android:focusableInTouchMode="false"
    android:textStyle="bold" />

<TextView
    android:id="@+id/tvStartLabel"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_below="@id/tvTrainName"
    android:gravity="right"
    android:text="@string/resultTimeOut"
    android:focusable="false"
    android:clickable="false"
    android:focusableInTouchMode="false"
    android:textColor="@android:color/white"
    android:textSize="15sp" />

<TextView
    android:id="@+id/tvTimeOut"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/tvTrainName"
    android:layout_marginRight="30sp"
    android:layout_toLeftOf="@id/tvStartLabel"
    android:text="@string/resultTimeOutEx"
    android:focusable="false"
    android:clickable="false"
    android:focusableInTouchMode="false"
    android:textColor="@android:color/white"
    android:textSize="15sp" />

<TextView
    android:id="@+id/tvFinishLabel"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_below="@id/tvStartLabel"
    android:gravity="right"
    android:focusable="false"
    android:clickable="false"
    android:focusableInTouchMode="false"
    android:text="@string/resultTimeIn"
    android:textColor="@android:color/white"
    android:textSize="15sp" />

<TextView
    android:id="@+id/tvTimeIn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignRight="@+id/tvTimeOut"
    android:layout_below="@id/tvTimeOut"
    android:text="@string/resultTimeInEx"
    android:focusable="false"
    android:clickable="false"
    android:focusableInTouchMode="false"
    android:textColor="@android:color/white"
    android:textSize="15sp" />

<TextView
    android:id="@+id/tvPrices"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_below="@id/tvTimeIn"
    android:gravity="right"
    android:focusable="false"
    android:focusableInTouchMode="false"
    android:clickable="false"
    android:textColor="@android:color/white"
    android:textSize="15sp" />

<ImageButton
    android:id="@+id/btnMoreInfo"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_centerVertical="true"
    android:layout_marginLeft="23dp"
    android:focusable="false"
    android:clickable="false"
    android:focusableInTouchMode="false"
    android:background="@android:color/transparent"
    android:contentDescription="@string/resultMoreInfo"
    android:src="@drawable/action_info" />

和ListActivity xml文件:

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >

<ListView 
    android:id="@android:id/list"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:drawSelectorOnTop="false"
    android:clickable="true"
    android:descendantFocusability="afterDescendants" />

</LinearLayout>

请帮助我:(

2 个答案:

答案 0 :(得分:0)

我不久前遇到了同样的问题。无论你做什么,ImageButton似乎都会成为焦点。我所做的是将ImageButton替换为ImageView并将侦听器设置为它。

这就是你的xml文件的样子。

行xml文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#27ae60"
    android:paddingBottom="5dp" >

<TextView
    android:id="@+id/tvTrainName"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:gravity="center"
    android:text="@string/resultTrainName"
    android:textColor="@android:color/white"
    android:textSize="20sp"
    android:textStyle="bold" />

<TextView
    android:id="@+id/tvStartLabel"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_below="@id/tvTrainName"
    android:gravity="right"
    android:text="@string/resultTimeOut"
    android:textColor="@android:color/white"
    android:textSize="15sp" />

<TextView
    android:id="@+id/tvTimeOut"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/tvTrainName"
    android:layout_marginRight="30sp"
    android:layout_toLeftOf="@id/tvStartLabel"
    android:text="@string/resultTimeOutEx"
    android:textColor="@android:color/white"
    android:textSize="15sp" />

<TextView
    android:id="@+id/tvFinishLabel"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_below="@id/tvStartLabel"
    android:gravity="right"
    android:text="@string/resultTimeIn"
    android:textColor="@android:color/white"
    android:textSize="15sp" />

<TextView
    android:id="@+id/tvTimeIn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignRight="@+id/tvTimeOut"
    android:layout_below="@id/tvTimeOut"
    android:text="@string/resultTimeInEx"
    android:textColor="@android:color/white"
    android:textSize="15sp" />

<TextView
    android:id="@+id/tvPrices"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_below="@id/tvTimeIn"
    android:gravity="right"
    android:textColor="@android:color/white"
    android:textSize="15sp" />

<ImageView
    android:id="@+id/btnMoreInfo"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_centerVertical="true"
    android:layout_marginLeft="23dp"
    android:background="@android:color/transparent"
    android:contentDescription="@string/resultMoreInfo"
    android:src="@drawable/action_info" />

Activity xml。

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >

<ListView 
    android:id="@android:id/list"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:drawSelectorOnTop="false"/>

</LinearLayout>

答案 1 :(得分:0)

使用普通活动并将ListView放在xml中。使用充气机来使用自定义行设计。只需将focusable = false放入图像按钮即可。它允许您单击该行,您可以为图像按钮应用单独的单击侦听器以单独处理其单击。