【发布时间】:2014-03-14 14:59:11
【问题描述】:
我不想让标题太长,所以我会在这里展开。我有一个片段(称为签名),当我按下该片段中的后退按钮时,我想调用一个方法来保存控件的数据(EditText 字段等)。因此,我实现了一个OnKeyListener(),以便我可以调用我的保存方法。这就是我的 keyListener 的样子。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
context = getActivity();
textFields = new ArrayList<EditText>();//These will store my dynamically generated controls
signatures = new ArrayList<DrawingView>();//These will store my dynamically generated controls
view = inflater.inflate(R.layout.signatures, container, false);
view.setFocusableInTouchMode(true);
view.requestFocus();
view.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if( keyCode == KeyEvent.KEYCODE_BACK )
{
storeData();//This method will save all the data
getFragmentManager().popBackStack("signature", FragmentManager.POP_BACK_STACK_INCLUSIVE);
return true;
}
else
{
return false;
}
}
});
//Create the main layout
RelativeLayout mainLayout = (RelativeLayout)view.findViewById(R.id.mainLayout);
//Dynamically generate the layout
setupPage(mainLayout);
return view;
}
所以这就是问题所在。我将单击将启动此片段(签名)的前一个片段。该片段将启动没有键盘弹出的问题。如果我按下后退按钮,它将启动 keyListener 代码没问题。但是,一旦我单击 EditText 并弹出键盘,如果我按回以清除键盘,则没有任何反应(这意味着 keyListener 代码没有被执行,这是有道理的)。这并不让我担心,但是当我第二次按下返回到上一个片段时,代码不会被执行。我相信对此有更深的理解,我似乎无法弄清楚。
【问题讨论】:
标签: android android-fragments keylistener android-keypad