我需要点击列表活动中的项目来执行某些操作,但它无法正常工作 我搜索这个问题并看到了一些关于此的答案,如:
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>
请帮助我:(
答案 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放入图像按钮即可。它允许您单击该行,您可以为图像按钮应用单独的单击侦听器以单独处理其单击。