代码之家  ›  专栏  ›  技术社区  ›  northerner

第一个按键未被侦听器捕获

  •  -2
  • northerner  · 技术社区  · 6 年前

    第一次按下“编辑信息”按钮时,除了随后的操作正常外,什么也不会发生。有很多类似的问题,我已经通过了,并尝试了一切,我没有成功。

    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            sharedPrefs = getSharedPreferences(USER_PREFERENCES, MODE_PRIVATE);
        //call function to load previous values, no intteraction with button
    
    
    
            final Button myButton = findViewById(R.id.button);
            myButton.setTag(1);
            myButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    final int status =(Integer) v.getTag();
                    if(status == 1) {
                        myButton.setText(getString(R.string.edit_info));
                        setEditable(false);
                        v.setTag(0);
                    } else {
                        myButton.setText(getString(R.string.save_info));
                        setEditable(true);
                        v.setTag(1);
                    }
                }
    
            });
           //proposed solution from other question, see note bellow (*)    
            myButton.setOnTouchListener(new View.OnTouchListener() {
    
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    if (event.getAction() == MotionEvent.ACTION_UP && !v.hasFocus()) {
                        // onClick() is not called when the EditText doesn't have focus,
                        // onFocusChange() is called instead, which might have a different
                        // meaning. This condition calls onClick() when click was performed
                        // but wasn't reported. Condition can be extended for v.isClickable()
                        // or v.isEnabled() if needed. Returning false means that everything
                        // else behaves as before.
                        myButton.performClick();
                    }
                    return false;
                }
            });
        }
    

    (*)来自 this question Matj Hrazdra建议添加OnTouchListner,但这样做使按钮永远不会返回。

    这里是activity\u main.xml

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:clickable="true"
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:text="@string/edit_info" />
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   user8959091 user8959091    6 年前

    从xml中,按钮已经有了文本 "@string/edit_info"
    onCreate()

                myButton.setText(getString(R.string.edit_info));
                setEditable(false);
                v.setTag(0);
    

    所以文本不会改变。
    之后,随后的单击将更改其文本。
    创建()