EditText的问题并没有让Focus成为片段

时间:2016-09-12 13:57:18

标签: android android-fragments android-edittext

我有一个从主要活动中调用的片段,在片段中我有一个EditText来监听扫描的条形码。

private void InputListener() {
    etInput.requestFocus();
    etInput.setOnEditorActionListener((v, actionId, event) -> {
        if ((event != null && (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) || (actionId == EditorInfo.IME_ACTION_DONE)) {
            String scanned;
            scanned = etInput.getText().toString().replace("\n", "").trim();

            if (scanned.length() != 8) {
                globals.PlayFile(Globals.Sounds.Bell);
                Snackbar snackbar = Snackbar.make(rootView, "Not an 8 Digit Barcode!", Snackbar.LENGTH_LONG);
                ColouredSnackbar.alert(snackbar).show();
            } else if (!scanned.substring(0, 2).equals("00") && !scanned.substring(0, 2).equals("01")) {
                globals.PlayFile(Globals.Sounds.Bell);
                Snackbar snackbar = Snackbar.make(rootView, "Please Check barcode!", Snackbar.LENGTH_LONG);
                ColouredSnackbar.alert(snackbar).show();
            } else {
                //Barcode Good
                AddPoscode(scanned);
            }
            etInput.setText("");
            scanned = "";
            etInput.requestFocus();
        }

        return false;
    });
}

这样可以正常工作,并在edittext上重新获得焦点以等待下一次扫描。

但是,如果我从已从另一个片段而不是主要活动调用的片段运行此代码,则不会在EditText上重新获得焦点。

有谁知道这是为什么?

我正在使用

compileSdkVersion 24
buildToolsVersion '24.0.2'

两个edittexts的xml是相同的

  <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="number"
        android:ems="10"
        android:id="@+id/etInput"
/>

我的第二个片段(从另一个片段调用)由此调用:

Bundle b = new Bundle();
                b.putInt("PickListID", h.getPickListID());
                MySecondFrag = new  MySecondFrag();
                FragmentTransaction t = getFragmentManager().beginTransaction();
                p.setArguments(b);
                t.replace(R.id.frame_container, p);
                Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar);
                toolbar.setTitle("Frag2");
                t.addToBackStack(null);
                t.commit();

更新 - 我不认为问题是因为它是从另一个片段调用的,即使从我的主要活动中调用它也会以相同的结果结束。想想我可能会删除我的班级并重新开始!

1 个答案:

答案 0 :(得分:0)

嗯,我解决了它,如果你有一个高度为match_parent的RecyclerView,这会从edittext中窃取焦点并且不允许它被设置。将高度更改为wrap_content解决了这个问题。