KeyEvent.KEYCODE_BACK 在 Fragment 中被调用两次
KeyEvent.KEYCODE_BACK getting called twice in Fragment
我在片段中的视图上调用 KeyEvent.KEYCODE_BACK,但由于某些奇怪的原因,它被调用了两次。
我不知道为什么会这样。
这是我的片段:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
myFragmentView = inflater.inflate(R.layout.folders, container, false);
myFragmentView.setFocusableInTouchMode(true);
myFragmentView.requestFocus();
myFragmentView.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if (keyCode == KeyEvent.KEYCODE_BACK) {
String parent = file.getParent().toString();
file = new File(parent);
File list[] = file.listFiles();
myList.clear();
for (int i = 0; i < list.length; i++) {
myList.add(list[i].getName());
}
Toast.makeText(getActivity(), parent, Toast.LENGTH_LONG)
.show();
setListAdapter(new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_list_item_1, myList));
}
return true;
}
});
return myFragmentView;
}
正确的是,onKey 会被调用两次,一次是针对 Down 事件,另一次是针对 Up 事件。请尝试添加条件:
if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {
...
}
希望对您有所帮助。
如果您知道要调用 onKeyDown 那么为什么不改用该方法呢? public boolean onKeyDown (int keyCode, KeyEvent event)
我在片段中的视图上调用 KeyEvent.KEYCODE_BACK,但由于某些奇怪的原因,它被调用了两次。
我不知道为什么会这样。
这是我的片段:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
myFragmentView = inflater.inflate(R.layout.folders, container, false);
myFragmentView.setFocusableInTouchMode(true);
myFragmentView.requestFocus();
myFragmentView.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if (keyCode == KeyEvent.KEYCODE_BACK) {
String parent = file.getParent().toString();
file = new File(parent);
File list[] = file.listFiles();
myList.clear();
for (int i = 0; i < list.length; i++) {
myList.add(list[i].getName());
}
Toast.makeText(getActivity(), parent, Toast.LENGTH_LONG)
.show();
setListAdapter(new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_list_item_1, myList));
}
return true;
}
});
return myFragmentView;
}
正确的是,onKey 会被调用两次,一次是针对 Down 事件,另一次是针对 Up 事件。请尝试添加条件:
if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {
...
}
希望对您有所帮助。
如果您知道要调用 onKeyDown 那么为什么不改用该方法呢? public boolean onKeyDown (int keyCode, KeyEvent event)