Java 如何从片段返回到主要活动
我成功地实现了底部导航抽屉,并使用了片段。现在我可以从抽屉菜单切换片段。 我这里的问题是,当我从抽屉菜单(例如:关于开发者)打开一个项目时,当用户单击后退按钮时,它会关闭应用程序。相反,我希望用户从任何片段返回到主活动。帮我个忙,我没有多少经验 这是我的密码 如何使用带有自定义库的抽屉适配器(SlidingRootNav-)实现nav抽屉项强> 片段类Java 如何从片段返回到主要活动,java,android,android-fragments,navigation-drawer,Java,Android,Android Fragments,Navigation Drawer,我成功地实现了底部导航抽屉,并使用了片段。现在我可以从抽屉菜单切换片段。 我这里的问题是,当我从抽屉菜单(例如:关于开发者)打开一个项目时,当用户单击后退按钮时,它会关闭应用程序。相反,我希望用户从任何片段返回到主活动。帮我个忙,我没有多少经验 这是我的密码 如何使用带有自定义库的抽屉适配器(SlidingRootNav-)实现nav抽屉项 片段类 import android.os.Bundle; import androidx.appcompat.widget.Toolbar; import
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;
}
}
对于您的事务使用
add
而不是replace
我认为这是因为addToBackStack方法中有null
transaction.addToBackStack(null)
因此,当您单击“后退”按钮时,不会获得主要活动
如果您想了解更多关于addToBackStack的工作原理,我建议您阅读此在做了一些挖掘之后,我终于找到了解决方法。我所要做的就是从主活动(在我的例子中是HomeActivity.class)向onBackPressed方法添加一个调整 NBaddToBackStack必须在片段事务期间使用,以记录片段何时处于活动状态。 说
transaction.addToBackStack(null)
至于Fragment类中的顶部导航,我所做的只是添加一个意图,在单击工具栏导航图标时调用home活动
public class AboutDeveloper extends Fragment {
Intent intent;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
ViewGroup root = (ViewGroup) inflater.inflate(R.layout.fragment_about_developer,container, false);
intent = new Intent(getActivity(), HomeActivity.class);
Toolbar toolbar = root.findViewById(R.id.return_home);
toolbar.setNavigationIcon(R.drawable.ic_baseline_arrow_back_ios_24);
toolbar.setTitle("About Developer");
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(intent);
getActivity().finish();
}
});
return root;
}
}
感谢那些提出建议的人。在我的addToBackStack方法中传递null参数不是问题。。事实上,它是解决方案的一部分,因为我需要它来记录活动片段的数量。感谢您的回复:)
@Override
public void onBackPressed() {
//Return to home activity from any active fragment
if (getSupportFragmentManager().getBackStackEntryCount() > 1) {
Intent intent = new Intent(this, HomeActivity.class);
startActivity(intent);
}
//To close nav drawer
else if(slidingRootNav.isMenuOpened()){
slidingRootNav.closeMenu();
}
else {
moveTaskToBack(true);
}
}
public class AboutDeveloper extends Fragment {
Intent intent;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
ViewGroup root = (ViewGroup) inflater.inflate(R.layout.fragment_about_developer,container, false);
intent = new Intent(getActivity(), HomeActivity.class);
Toolbar toolbar = root.findViewById(R.id.return_home);
toolbar.setNavigationIcon(R.drawable.ic_baseline_arrow_back_ios_24);
toolbar.setTitle("About Developer");
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(intent);
getActivity().finish();
}
});
return root;
}
}