单击EditText会禁用单击元素元素

时间:2012-10-19 08:18:39

标签: android button focus android-edittext onclicklistener

我有ListView的页眉和页脚。标题 - 是一个带有EditTexts和Spinners集的长ScrollView。页脚中有两个按钮。当我单击其中一个EditText时,然后单击页脚的按钮它不会触发。当我点击另一个标题的元素时,我会看到页脚按钮处理程序的结果。当我没有点击这个EditText时,页脚按钮正常工作。我的EditText:

<EditText
    android:id="@+id/orderTitle"
    android:layout_width="250dp"
    android:layout_height="wrap_content"
    android:layout_below="@+id/levelSpin"
    android:layout_marginTop="30dp"
    android:text="Order title(specify)"
    android:gravity="center_vertical|center_horizontal" />

我认为editText点击不相关页脚视图的问题。所以我试着在我的按钮的setOnClickListener中做这样的事情:

btnSubmitOrder.setOnClickListener(new View.OnClickListener() {

    public void onClick(View view) {
        footer.setFocusableInTouchMode(true);
        deadline.setFocusable(false);
        orderTitle.setFocusable(false);
        header.clearFocus();
        btnSubmitOrder.setFocusable(true);
        Log.i("new order button","fires");
        boolean errorFlag = false;
    }
});

但它没有帮助。我也试过这样:

orderTitle.setOnEditorActionListener(new OnEditorActionListener() {

    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        if (actionId == EditorInfo.IME_ACTION_DONE) {
            orderTitle.setFocusable(false);
            Log.i("onEditorAction","yeah");
        }
        Log.i("onEditorAction","yeah");
        return false;
    }
});

当用户的操作完成时,请对此EditText进行不相关,但它也没有帮助。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

还有另一种选择,它可以在页脚上设置以下内容。还有另一种方法重载创建,但它没有出现在文档中(至少在我的IDE中没有),我必须检查在线文档:

mylistView.addFooterView(footerView, null, **false**);

其中false告诉页脚不可选择。我自己测试了这个,页脚内的按钮响应触摸。我希望这是一个可接受的答案。

否则如你提到的那样你将不得不使用ontouchlistener作为列表视图和按钮争夺焦点并且listview赢了。这就是为什么当你点击列表视图时按钮不再触发,因为列表视图得到了关注。

答案 1 :(得分:0)

我使用

解决了问题
btnSubmitOrder.setOnTouchListener(new OnTouchListener() {

            public boolean onTouch(View v, MotionEvent event) {
                 if (event.getAction() == MotionEvent.ACTION_DOWN)
                        {
                     header.clearFocus();
                        }
                   }
         });