【问题标题】:How to add backbutton in fragment android如何在片段android中添加后退按钮
【发布时间】:2015-04-08 18:34:16
【问题描述】:

我正在制作一个聊天应用程序,我有很多片段,但我只使用一个活动。在我的应用程序导航抽屉中也有,所以我的问题是我要从第一个片段到第二个片段,在第二个片段我正在使用 actionbar homeupenabled 显示后退按钮,但是当我按下该后退按钮时,我没有从 onoptionsmenuselected 获得任何操作。当我通过抽屉指示器 false 进入第二个片段时,我正在删除抽屉切换。我尝试了各种方式,请帮助我

代码:

public class SecondFragment extends Fragment
    {

        private BaseActivity _activity;


        @Override
        public void onAttach(Activity activity)
        {
            super.onAttach(activity);
            _activity= (BaseActivity) activity;

        }

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setHasOptionsMenu(true);
        }

        @Override
        public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState)
        {
            View view = inflater.inflate(R.layout.base, null);
                           _activity._mActionBarDrawerToggle.setDrawerIndicatorEnabled(false);
            _activity.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            return view;
        }

        @Override
        public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
            super.onCreateOptionsMenu(menu, inflater);
        }

        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            switch (item.getItemId()) {
                case android.R.id.home:
                    // app icon in action bar clicked; goto parent activity.
                    getActivity().getSupportFragmentManager().popBackStack();
                    Toast.makeText(getActivity(),"working",Toast.LENGTH_SHORT).show();
                    return true;
                default:
                    return super.onOptionsItemSelected(item);
            }
        }

【问题讨论】:

  • 我在做活动

标签: android android-actionbar fragment


【解决方案1】:

你可以使用

getActivity().onBackPressed()

【讨论】:

  • 当我按回片段时,我没有吐司
【解决方案2】:

你只能在同一时间做同一件事

1)Open drawer event or
2)Back Button

因为其他都是片段

如果你想在后按事件上做一些事情,那么你可以使用覆盖的方法

public void onBackPressed()

你的活动

【讨论】:

  • 我通过设置 false 来移除抽屉指示器
  • 我可以看看你的活动课吗?
【解决方案3】:

当你创建第二个片段时,你是否将第二个片段从你的第一个片段中放到了后台堆栈中?我遇到了您描述的确切问题。阅读您的代码,我意识到我在第二个片段中没有覆盖onOptionsItemSelected,但已经在第二个片段中调用了setHasOptionsMenu(true)setDisplayHomeAsUpEnabled(true)。因此,只要我包含onOptionsItemSelected。我能够回到第一个片段。我什至只是将您的家庭案例代码粘贴到我的第二个片段中,并在第一个片段中获得了“工作”吐司。

我唯一的其他区别是我不包含@Override public View onCreateView。但这是出于不同的原因。所以我的setHasOptionsMenu(true)setDisplayHomeAsUpEnabled(true)onActivityCreated 中被调用,我的第一个片段是活动在创建时在其容器中膨胀的主要片段。

从第一个片段调用第二个片段就像在 onlistItemClick 中那样完成

Bundle args = new Bundle();
        args.putSerializable("SELECTED_TAG", dataList);

        SecondFragment toFragment = new SecondFragment();
        toFragment.setArguments(args);
        //show more about the exercise
        //TODO:start an indent to launch new activity
        FragmentManager fm = getFragmentManager();
        FragmentTransaction transaction = fm.beginTransaction();
        transaction.setCustomAnimations(R.anim.slidein, R.anim.slideout);
        transaction.addToBackStack(null).replace(R.id.container, toFragment, SECOND_FRAGMENT_TAG)
                .commit();

然后第二个片段就像你的一样在 onOptionItemSelected 中“返回”

【讨论】:

    猜你喜欢
    • 2018-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-09
    • 2013-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多