gpt4 book ai didi

android - 后退时 fragment 未附加到 Activity

转载 作者:行者123 更新时间:2023-11-29 01:20:09 24 4
gpt4 key购买 nike

我有一个 fragment 的实现,解释为 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 中。

下面是我如何实现代码来处理后退,

我的 fragment 扩展了 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();
}

由此处理每个 fragment 的后退按钮按下和工具栏中的右栏按钮项目点击。

考虑我有三个 fragment A、B 和 C 的场景。

我从 fragment A 打开 fragment B,然后打开 fragment C。现在从 fragment C,我单击后退按钮到达 fragment B。后退按钮事件由上面的代码处理,并且工作正常。

现在从 Fragment B,我单击后退按钮到达 Fragment A。但是当我单击后退按钮时,出现异常

java.lang.IllegalStateException: Fragment CardDetailsFragment{d8b35b5} not attached to Activity
at android.support.v4.app.Fragment.getResources(Fragment.java:636)

here the CardDetailsFragment is the FragmentC, but I am clicking the back button from Fragment B

最佳答案

用户第一次按下后退按钮时,Fragment C 不再是必需的,因此它与 Activity 分离。问题在于,即使 Fragment C 已分离,它仍然注册为后台堆栈更改事件的监听器。

用户第二次按下后退按钮时,您的onBackStackPressed() 方法在Fragment C 中被调用。当getResources() 被执行时,没有 Activity 附件所以 getResources() 失败了。

fragment 中的类似内容应该可以修复它:

     @Override
public void onDestroy() {
getFragmentManager().removeOnBackStackChangedListener(this);
super.onDestroy();
}

关于android - 后退时 fragment 未附加到 Activity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37333446/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com