繁体   English   中英

片段Android中未调用setOnFocusChangeListener

[英]setOnFocusChangeListener not being called in Fragment Android

在我的片段中,没有调用setOnFocusChangeListener()。 可能是什么原因? onToch和onClick运行正常。 这是我的代码:

public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.fragment_barcode_detail,
            container, false);
editText_barcode = (EditText) rootView
            .findViewById(R.id.editText_barcode);

editText_barcode.setOnFocusChangeListener(new OnFocusChangeListener() {

            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                if (hasFocus) {
                            editos = (EditText) v;
                            System.out.println("====onf== "+editos);
                            key.showCustomNumKeyboard(v);
                        } else {
                            key.hideCustomNumKeyboard();
                        }
            }

        });
}

问题是开关盒。 拆下开关盒即可。 在FocusChange侦听器中返回的View的ID始终为editText_barcode由于您尝试与另一个ID匹配,因此switchcase条件失败。

尝试这个...

 your activity implement OnFocusChangeListener

 In onCreateView()
 editText_barcode.setOnFocusChangeListener(this);

 @Override
 public void onFocusChange(View v, boolean hasFocus) {
 switch(v.getId()){
 case r.id.editText_barcode:

      //code here

 break;

...etc
    }
}

通常只要在屏幕上加载该视图时就需要请求焦点,并且需要引起用户的注意。要获得视图的焦点,需要在该视图中添加两个属性android:focusableandroid:focusableInTouchMode ,然后requestFocus

 <EditText android:id="@+id/editText_barcode" 
  ...required attributes
  android:focusable="true"
  android:focusableInTouchMode="true"> 
<requestFocus /> 
</EditText>

另外,您正在如下设置onFocusChangeListener() ,以确保它是View.onFocusChangeListener()因此建议您更改以下代码

editText_barcode.setOnFocusChangeListener(new OnFocusChangeListener() {
            @Override

editText_barcode.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override

同样在检查hasFocus我会要求您将其更改为

        Log.d(TAG,"EditTextBarcode has Focus value " + hasFocus)
        if (hasFocus) {
                   Log.d(TAG,"EditTextBarcode has Focus")
                   key.showCustomNumKeyboard(v);
                } else {
                   Log.d(TAG,"EditTextBarcode does not have Focus")
                   key.hideCustomNumKeyboard();
                }

setOnFocusChangeListener有时会出现setOnFocusChangeListener 尝试setOnTouchListener

editText_barcode = (EditText) rootView
            .findViewById(R.id.editText_barcode);
editText_barcode.clearFocus()
editText_barcode.setOnTouchListener(new OnTouchListener()() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            // Your code here
            return false;
        }


});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM