简体   繁体   English

片段工具栏中的后退按钮

[英]back button in toolbar of fragments

I have a activity with fragments under tabbed layout.我在选项卡式布局下有一个片段活动。 This is my apps hierarchy => MainActivity.class > FragmentExplore.class > FragmentOne.class or FragmentTwo.class or FragmentTheree.class.这是我的应用程序层次结构 => MainActivity.class > FragmentExplore.class > FragmentOne.class 或 FragmentTwo.class 或 FragmentTheree.class。

I want to set back button in the toolbar of the main activity.我想在主要活动的工具栏中设置后退按钮。 I tried to insert the java and xml code of the toolbar in all the xml and java file of these activity and fragments.我尝试在这些活动和片段的所有883812976388和java文件中插入工具栏的java和xml代码。 But, the back button is not working.但是,后退按钮不起作用。

This is the java and xml code of that toolbar's back button:这是该工具栏后退按钮的 java 和 xml 代码:

 <com.google.android.material.appbar.AppBarLayout
        ...>
        <androidx.appcompat.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="@color/colorPrimary"
            />
</com.google.android.material.appbar.AppBarLayout>
        Toolbar toolbar = view.findViewById(R.id.toolbar);
        toolbar.setNavigationIcon(R.drawable.ic_rating);
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
        Toast.makeText(getActivity(), "back pressed", Toast.LENGTH_SHORT).show();
            }
        });

Similarly, this is MainActivity.class:同样,这是 MainActivity.class:

public class MainActivity extends AppCompatActivity {
    private final static String COLLAPSING_TOOLBAR_FRAGMENT_TAG = "collapsing_toolbar";
    private final static String SELECTED_TAG = "selected_index";
    private final static int COLLAPSING_TOOLBAR = 0;

    private static int selectedIndex;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        selectedIndex = COLLAPSING_TOOLBAR;
        getSupportFragmentManager().beginTransaction().add(R.id.fragment_container,
                new FragmentExplore(), COLLAPSING_TOOLBAR_FRAGMENT_TAG).commit();
    }
    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putInt(SELECTED_TAG, selectedIndex);
    }
    }
}

FragmentExplore:片段探索:

public class FragmentExplore extends Fragment {
    public FragmentExplore() {
    }
    @Override
    public void onAttach(Context activity) {
        super.onAttach(activity);
        mainActivity = (MainActivity) activity;
    }

    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.tab_layout, container, false);

        AppBarLayout appBarLayout = view.findViewById(R.id.tab_appbar_layout);
        ((CoordinatorLayout.LayoutParams) appBarLayout.getLayoutParams()).setBehavior(new AppBarLayoutBehavior());

        tabLayout = view.findViewById(R.id.tabs);
        tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);
        tabLayout.setTabGravity(TabLayout.GRAVITY_CENTER);

        viewPager = view.findViewById(R.id.viewpager);
        viewPager.setOffscreenPageLimit(tab_count);

        toolbar = view.findViewById(R.id.toolbar);
        setupToolbar();

        viewPager.setAdapter(new MyAdapter(getChildFragmentManager()));

        tabLayout.post(new Runnable() {
            @Override
            public void run() {
                tabLayout.setupWithViewPager(viewPager);
                viewPager.setCurrentItem(1);
            }
        });
        return view;
    }

    public class MyAdapter extends FragmentPagerAdapter {
        private MyAdapter(FragmentManager fm) {
            super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
        }
        @Override
        public Fragment getItem(int position) {...}

        @Override
        public int getCount() {
            return tab_count;
        }

        @Override
        public CharSequence getPageTitle(int position) {...}
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
    }

    private void setupToolbar() {
        toolbar.setTitle(getString(R.string.app_name));
        mainActivity.setSupportActionBar(toolbar);
    }

}

And FragmentOne.class:和 FragmentOne.class:

public class FragmentOne extends Fragment {

    View view;

    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.activity_frag_one, container, false);
        return view;
    }

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

    }
}

I tried to put those toolbar's xml and java code in different places but cann't solve this.我试图将那些工具栏的 xml 和 java 代码放在不同的地方,但无法解决这个问题。 thank you so much in advance.非常感谢你提前。

You should set after call setSupportActionBar try this你应该在调用setSupportActionBar之后设置试试这个

    private void setupToolbar() {
        mainActivity.setSupportActionBar(toolbar);
        toolbar.setNavigationIcon(R.drawable.ic_rating);
        mainActivity. getSupportActionBar().setTitle(getString(R.string.app_name));
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
        Toast.makeText(getActivity(), "back pressed", Toast.LENGTH_SHORT).show();
            }
        });
    }

Add it into tab_layout and init it in onCreateView将它添加到tab_layout并在onCreateView中初始化它

        <androidx.appcompat.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="@color/colorPrimary"
            />

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM