【发布时间】:2016-05-19 20:30:48
【问题描述】:
我有一个片段的实现,如here 所述。我扩展了 BaseFragment 类来处理导航图标 onClickListener。代码如下所示,
private void onBackButtonPressed(int tag)
{
switch (tag)
{
case Global.DISPLAY_STORE:
{
setTitle("Loyalty Cards",Color.BLACK);
setToolBar(getResources().getColor(R.color.white), Global.ADD_CARD,R.drawable.add_round_btn);
break;
}
case Global.ADD_CARD:
{
setTitle("Wallet", Color.WHITE);
setToolBar(getResources().getColor(R.color.colorPrimary), Global.DISPLAY_STORE,R.drawable.icon_shopping);
getFragmentManager().popBackStack();
break;
}
case Global.CARD_DETAILS:
{
setTitle("Loyalty Cards",Color.BLACK);
setToolBar(getResources().getColor(R.color.white), Global.ADD_CARD,R.drawable.add_round_btn);
getFragmentManager().popBackStack();
break;
}
}
}
当按下返回按钮时,我正在使用此代码块来更改工具栏图标和颜色。此代码位于 BaseFragment 中。
这是我如何实现处理后按的代码,
我的片段扩展了 BaseFragment
public class CardDetailsFragment extends BaseFragment
现在在 BaseFragment onCreate 我有这段代码,
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mainActivity = (MainActivity) getActivity();
ImageButton righBarButton = (ImageButton) mainActivity.getToolbar().findViewById(R.id.btn_ToolBarRightBtn);
righBarButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onRighBarButtonClicked(Integer.parseInt(v.getTag().toString()));
}
});
mainActivity.getToolbar().setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onBackButtonPressed(BACK_BUTTON_TAG);
}
});
getFragmentManager().addOnBackStackChangedListener(this);
shouldDisplayHomeUp();
}
通过这个每个片段的后退按钮按下和工具栏中的右栏按钮项目点击被处理。
考虑我有三个片段 A 、 B 和 C 的场景。
从片段 A 我打开片段 B 然后打开片段 C。现在从片段 C 我单击返回按钮到达片段 B。返回按钮事件由上面的代码处理,它工作正常。
现在从片段 B,我单击返回按钮到达片段 A。但是当我单击返回按钮时,我得到了异常
java.lang.IllegalStateException: Fragment CardDetailsFragment{d8b35b5} not attached to Activity
at android.support.v4.app.Fragment.getResources(Fragment.java:636)
这里的 CardDetailsFragment 是 FragmentC,但我点击的是 Fragment B 的后退按钮
【问题讨论】:
-
片段如何让事件调用
onBackButtonPressed()? -
我已经更新了 pst
-
尝试将片段实例存储在 Back 堆栈中并在后按时加载它
标签: android android-fragments fragment-backstack