ListView页脚仅在首先选择listview项目后才可选择

时间:2015-02-06 16:01:30

标签: android listview android-listview android-button

所以我搜索并搜索并尝试了我见过的所有方法但似乎没有解决我的问题。我的listview使用自定义适配器生成,我添加了页脚视图和onTouchMethod,我知道它正在与lsitview竞争焦点,并且listview赢了,因为我已经读过这个错误。但也许有些东西我看不到,我想念。

我需要在任何时候都可以选择页脚视图,现在它只能在listview中选择一个项目之后才能选择,然后一切都按照它的设想工作。但是在列表视图上第一次加载时,页脚没有响应。

这是我的代码。

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" /> 

Listview 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在首先点击然后点击页脚时不会失去焦点。

3 个答案:

答案 0 :(得分:1)

通过在onItemClick外部放置onTouch方法以及onItemClick内部的一个方法解决,以便在选择listview时与listview进行交互。

还在onIemClick

之外的onTouch方法中添加了listview.clearChoices()

答案 1 :(得分:0)

移动你的

        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));
                }

答案 2 :(得分:0)

在你的Button xml中:

android:clickable="false"

如果列表中的元素的clickable为true,onItemClickListener将无效。

android:clickable="true" mean's that it's not clickable?

您还需要设置:

android:focusable="false

第一次点击即可获得焦点。

https://stackoverflow.com/a/20473421/3956566