我有一个从主要活动中调用的片段,在片段中我有一个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();
更新 - 我不认为问题是因为它是从另一个片段调用的,即使从我的主要活动中调用它也会以相同的结果结束。想想我可能会删除我的班级并重新开始!
答案 0 :(得分:0)
嗯,我解决了它,如果你有一个高度为match_parent的RecyclerView,这会从edittext中窃取焦点并且不允许它被设置。将高度更改为wrap_content解决了这个问题。