我的列表视图有行布局,如
<?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="match_parent"
android:orientation="horizontal"
android:weightSum="5"
>
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:id="@+id/ArriveTime"
android:gravity="center"
android:layout_weight="1" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:id="@+id/Name"
android:gravity="center"
android:layout_weight="1" />
<Button
android:focusable="false"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:id="@+id/Arrive"
android:gravity="center"
android:layout_weight="1"
android:text="Arrive" />
<Button
android:focusable="false"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:id="@+id/Encounter"
android:gravity="center"
android:layout_weight="1"
android:text="Encounter" />
<Button
android:focusable="false"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:id="@+id/Exit"
android:gravity="center"
android:layout_weight="1"
android:text="Exit" />
</LinearLayout>
我想点击行时可以点击按钮,所以我设置android:focusable="false"
然后点击我说
MainGrid.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Log.d("zzzzzzzzzzzzzzzzzzzzzzzz",""+ oldPosition);
if(oldPosition != -1)
{
MainGrid.getChildAt(oldPosition).setFocusable(false);
//MainGrid.findViewById(oldPosition).setFocusable(false);
}
// Set the whole list view unfocusable
MainGrid.setFocusable(false);
// focus only on this
view.setFocusable(true);
oldPosition = position -1;
SetMenueOnClick(position-1) ;
}});
问题是,在第一次点击该行后,按钮处于活动状态,我无法再点击它任何想法修复它,我需要激活我点击的行上的按钮然后将焦点转移到行进一步点击
答案 0 :(得分:3)
如果您希望线路和按钮都可以点击(始终),则无需经历所有这些旋转。只需将这两行添加到行xml中的按钮标注:
android:focusable="false"
android:focusableInTouchMode="false"
然后,您只需在适配器中为每个按钮设置按钮单击侦听器,并在正常调用列表的活动中单击侦听器。
如果您希望按钮被禁用,直到您点击该行(我不清楚这是否是目标,或者只是您试图获得两种可点击方式的后续效果),设置为xml与可聚焦标注相同,将按钮设置为禁用,然后在onListItemClick
设置if
语句,使用标记切换它们可点击而不是可点击使用{{1 }和button.setEnabled(false);
。
答案 1 :(得分:0)
除了setFocusable(true),您还可以使用setChecked(boolean b)。但是你可以在CompoundButton上使用这个方法。
来自java:
CompoundButton cb = (CompoundButton) findViewById(R.id.yourButton);
cb.setChecked(true);
在XML
中<CompoundButton
android:id="@+id/yourButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/button_stats"
android:text="@string/stat_hard">
</CompoundButton>
其中button_stats.xml是位于res / drawable中的文件,其中包含以下行:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/generic_button_normal" android:state_checked="false"/>
<item android:drawable="@drawable/generic_button_checked" android:state_checked="true"/>
</selector>
答案 2 :(得分:0)
您可以尝试使用:
android:descendantFocusability="blocksDescendants"
在布局XML中,而不是单独修改每个元素。
您可以在列表视图问题Here
中阅读更多关于按钮的信息特别评论#27&amp; #31
希望有所帮助