我成功地实现了底部导航抽屉,并使用了片段。现在我可以从抽屉菜单切换片段。我这里的问题是,当我从抽屉菜单打开一个项目时(例如;关于开发者),当用户单击后退按钮时,它会关闭应用程序。相反,我希望用户从任何片段返回到主活动。帮我个忙,我没有多少经验。
这是我的密码;
如何使用带有自定义库的抽屉适配器(slidingrootnav-https://github.com/yarolegovich/slidingrootnav);
@Override
public void onItemSelected(int position) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
if (position == POS_DASHBOARD){
slidingRootNav.closeMenu();
transaction.addToBackStack(null);
transaction.commit();
}
else if (position == POS_ABOUT_APP){
((CoordinatorLayout)findViewById(R.id.root_view)).removeAllViews();
AboutAppFragment aboutApp = new AboutAppFragment();
transaction.replace(R.id.container, aboutApp);
slidingRootNav.closeMenu();
transaction.addToBackStack(null);
transaction.commit();
}
else if (position == POS_ABOUT_DEVELOPERS){
((CoordinatorLayout)findViewById(R.id.root_view)).removeAllViews();
AboutDeveloper aboutDeveloper = new AboutDeveloper();
transaction.replace(R.id.container, aboutDeveloper);
slidingRootNav.closeMenu();
transaction.addToBackStack(null);
transaction.commit();
}
}
片段类
import android.os.Bundle;
import androidx.appcompat.widget.Toolbar;
import androidx.fragment.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class AboutDeveloper extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
ViewGroup root = (ViewGroup) inflater.inflate(R.layout.fragment_about_developer,container, false);
// Here I implemented a toolbar at the top for navigation purpose
// but on clicking on the nav icon, the app closes, instead i want to return to the main activity
Toolbar toolbar = root.findViewById(R.id.return_home);
toolbar.setNavigationIcon(R.drawable.ic_baseline_arrow_back_24);
toolbar.setTitle("About Developer");
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getActivity().onBackPressed();
}
});
return root;
}
}
3条答案
按热度按时间kknvjkwl1#
而不是
replace
使用add
为您的交易bz4sfanl2#
我认为这是因为addtobackstack方法中有null
因此,当您单击back按钮时,不会得到主活动。
如果您想了解更多关于addtobackstack的工作原理,我建议您阅读以下内容:带null参数的addtobackstack的含义是什么?
uqjltbpv3#
在做了一些挖掘之后,我终于找到了绕过它的方法。我所要做的就是从主活动(在我的例子中是homeactivity.class)向onbackpressed方法添加一个调整。
nb addtobackstack必须在片段事务期间使用,以便在片段处于活动状态时保持计数。说
transaction.addToBackStack(null)
至于fragment类中的顶部导航,我所做的只是添加一个意图,当单击工具栏nav图标时调用home活动。感谢那些提出建议的人。