ListView 页脚仅在首先选择 listview 项后可选择
ListView footer only selectable after selecting listview item first
所以我搜索了又搜索并尝试了我见过的每一种方法,但似乎都无法解决我的问题。我的列表视图使用自定义适配器生成,我添加了页脚视图和 onTouchMethod,并且我知道它正在与 lsitview 竞争焦点,并且列表视图获胜,因为我已经阅读了有关此错误的信息。但也许有些东西我看不到,我错过了。
我需要始终可以选择页脚视图,现在它只能在列表视图中选择一个项目后才能选择,然后一切都按预期进行。但是在列表视图上第一次加载时,页脚没有响应。
这是我的代码。
customAdapter = new ListAdapter(this, R.layout.itemlistrow, store_data);
customAdapter.setNotifyOnChange(true);
listView.addFooterView(none_of_the_above, null, false);
listView.setAdapter(customAdapter);
listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
listView.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> arg0, final View view,
int position, long id) {
none_of_the_above.setOnTouchListener(new View.OnTouchListener() {
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
v.setSelected(true);
view.setSelected(false);
view.setActivated(false);
view.clearFocus();
Log.e("NoneOFTheAboveButton:onTouch", "clicked");
none_of_the_above.setBackground(getResources().getDrawable(R.drawable.store_setup2_found_selection_boxes_modified_states));
}
return false;
}
});
listView.clearFocus();
none_of_the_above.setSelected(false);
view.setSelected(true);
view.setActivated(true);
selectedPosition = position;
customAdapter.setSelectedPosition(selectedPosition);
}
});
我的页脚按钮 xml
<Button xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/none_of_the_above"
android:layout_width="match_parent"
android:layout_height="45dp"
android:layout_marginBottom="10dp"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:background="@drawable/store_setup2_found_selection_boxes_modified_states"
android:focusable="true"
android:clickable="true"
android:text="NONE OF THE ABOVE" />
列表视图xml:
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/selection_1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="20dp"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_marginTop="20dp"
android:clickable="false"
android:focusable="false"
android:descendantFocusability="blocksDescendants" >
我现在已经将 onTouchMethod 从 listview 的 OnItemClick 中取出并放在上面,它会在第一次尝试时收到点击。但是现在,当先单击然后单击页脚时,Listview 不会失去焦点。
移动你的
none_of_the_above.setOnTouchListener(new View.OnTouchListener() {
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
v.setSelected(true);
view.setSelected(false);
view.setActivated(false);
view.clearFocus();
Log.e("NoneOFTheAboveButton:onTouch", "clicked");
none_of_the_above.setBackground(getResources().getDrawable(R.drawable.store_setup2_found_selection_boxes_modified_states));
}
return false;
}
});
在 listView.setOnItemClickListener()
之外。把它放在这一行之前,而不是在 onItemClick()
方法中。
然后在onItemClick()
方法中输入:
none_of_the_above.setTag(view);
并且在 onTouch()
中使用这个:
if (event.getAction() == MotionEvent.ACTION_DOWN) {
v.setSelected(true);
(v.getTag()).setSelected(false);
(v.getTag()).setActivated(false);
(v.getTag()).clearFocus();
Log.e("NoneOFTheAboveButton:onTouch", "clicked");
v.setBackground(getResources().getDrawable(R.drawable.store_setup2_found_selection_boxes_modified_states));
}
在你的按钮中 xml:
android:clickable="false"
如果列表中的元素可点击为真,则 onItemClickListener 将不起作用。
android:clickable="true" mean's that it's not clickable?
您还需要设置:
android:focusable="false
因为第一次点击是获得焦点。
通过在 onItemClick 外部放置 onTouch 方法以及在 onItemClick 内部放置一个方法来解决,以便在选择列表视图时与列表视图进行交互。
还在 onIemClick 之外的 onTouch 方法中添加了listview.clearChoices()
所以我搜索了又搜索并尝试了我见过的每一种方法,但似乎都无法解决我的问题。我的列表视图使用自定义适配器生成,我添加了页脚视图和 onTouchMethod,并且我知道它正在与 lsitview 竞争焦点,并且列表视图获胜,因为我已经阅读了有关此错误的信息。但也许有些东西我看不到,我错过了。
我需要始终可以选择页脚视图,现在它只能在列表视图中选择一个项目后才能选择,然后一切都按预期进行。但是在列表视图上第一次加载时,页脚没有响应。
这是我的代码。
customAdapter = new ListAdapter(this, R.layout.itemlistrow, store_data);
customAdapter.setNotifyOnChange(true);
listView.addFooterView(none_of_the_above, null, false);
listView.setAdapter(customAdapter);
listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
listView.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> arg0, final View view,
int position, long id) {
none_of_the_above.setOnTouchListener(new View.OnTouchListener() {
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
v.setSelected(true);
view.setSelected(false);
view.setActivated(false);
view.clearFocus();
Log.e("NoneOFTheAboveButton:onTouch", "clicked");
none_of_the_above.setBackground(getResources().getDrawable(R.drawable.store_setup2_found_selection_boxes_modified_states));
}
return false;
}
});
listView.clearFocus();
none_of_the_above.setSelected(false);
view.setSelected(true);
view.setActivated(true);
selectedPosition = position;
customAdapter.setSelectedPosition(selectedPosition);
}
});
我的页脚按钮 xml
<Button xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/none_of_the_above"
android:layout_width="match_parent"
android:layout_height="45dp"
android:layout_marginBottom="10dp"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:background="@drawable/store_setup2_found_selection_boxes_modified_states"
android:focusable="true"
android:clickable="true"
android:text="NONE OF THE ABOVE" />
列表视图xml:
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/selection_1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="20dp"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_marginTop="20dp"
android:clickable="false"
android:focusable="false"
android:descendantFocusability="blocksDescendants" >
我现在已经将 onTouchMethod 从 listview 的 OnItemClick 中取出并放在上面,它会在第一次尝试时收到点击。但是现在,当先单击然后单击页脚时,Listview 不会失去焦点。
移动你的
none_of_the_above.setOnTouchListener(new View.OnTouchListener() {
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
v.setSelected(true);
view.setSelected(false);
view.setActivated(false);
view.clearFocus();
Log.e("NoneOFTheAboveButton:onTouch", "clicked");
none_of_the_above.setBackground(getResources().getDrawable(R.drawable.store_setup2_found_selection_boxes_modified_states));
}
return false;
}
});
在 listView.setOnItemClickListener()
之外。把它放在这一行之前,而不是在 onItemClick()
方法中。
然后在onItemClick()
方法中输入:
none_of_the_above.setTag(view);
并且在 onTouch()
中使用这个:
if (event.getAction() == MotionEvent.ACTION_DOWN) {
v.setSelected(true);
(v.getTag()).setSelected(false);
(v.getTag()).setActivated(false);
(v.getTag()).clearFocus();
Log.e("NoneOFTheAboveButton:onTouch", "clicked");
v.setBackground(getResources().getDrawable(R.drawable.store_setup2_found_selection_boxes_modified_states));
}
在你的按钮中 xml:
android:clickable="false"
如果列表中的元素可点击为真,则 onItemClickListener 将不起作用。
android:clickable="true" mean's that it's not clickable?
您还需要设置:
android:focusable="false
因为第一次点击是获得焦点。
通过在 onItemClick 外部放置 onTouch 方法以及在 onItemClick 内部放置一个方法来解决,以便在选择列表视图时与列表视图进行交互。
还在 onIemClick 之外的 onTouch 方法中添加了listview.clearChoices()