更换后如何返回第一个Android Fragment [英] How to go back to first Android Fragment after replace
问题描述
替换后,我正尝试回到第一个片段,但是supportFragmentManager.popBackStackImmediate()无法正常工作...
I'm trying to get back to the first fragment after replacing it, but supportFragmentManager.popBackStackImmediate() do not work...
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.countries_list_activity)
var colonCount = 1
if (savedInstanceState == null) {
supportFragmentManager.beginTransaction()
.replace(R.id.container, CountriesFragment.newInstance(colonCount))
.addToBackStack(null)
.commit()
}
}
override fun onListFragmentInteraction(item: Country?) {
supportFragmentManager.beginTransaction()
.replace(R.id.container, CountriesListFragment.newInstance())
.commit()
}
override fun onBackPressed() {
supportFragmentManager.popBackStackImmediate()
}
函数调用顺序为OnCreate-> onListFragmentInteraction-> onBackPressed 我想念的是什么?
The function call order is OnCreate -> onListFragmentInteraction -> onBackPressed What i'm missing?
推荐答案
开始时,我使用popbackstack方法,但是每次按下后退按钮时,它都会循环迭代.所以我改变了我的概念,而不是popbackstack我保持不变的变量.并使用它来管理我的片段.为此,请按照以下步骤操作.
At starting i use popbackstack method but in this it iterate loop every time when back button is pressed. So i change my concept instead of popbackstack i maintain constant variable. and using this i manage my fragment. For that Follow Below Steps.
第1步:至少设置两个全局变量.
Step 1: make atleast two Global Variable.
public static String currentTAG="HomeFragment";
public static String AboutUsFragment="AboutUsFragment";
public static String HelpfulTipsFragment="HelpfulTipsFragment";
第2步:在片段打开"时更改CurrentTag值.
Step 2: Change CurrentTag value when Fragment Open.
在currentTAG = HomeFragment中的Home Fragment中 类似地,对于 aboutUsFragment set CurrentTAG = AboutUsFragment;
In Home Fragment in currentTAG=HomeFragment similarly for aboutUsFragment set CurrentTAG=AboutUsFragment;
步骤3:然后在您的主要活动之后,在Onbackpress方法中写下以下代码.
Step 3: Then After in Your main Activity Write down Below Code in Onbackpress method.
if (Const.currentTAG.equals(Const.HomeFragment)) {
ExitApp();
}else{
getSupportFragmentManager().beginTransaction().replace(R.id.maincontainer, new HomeFragment()).addToBackStack(null).commit();
}
private void ExitApp() {
final AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle(R.string.app_name);
builder.setMessage(R.string.ask_before_close);
builder.setIcon(R.mipmap.ic_launcher);
//final AlertDialog dialog = builder.create();
builder.setPositiveButton("YES", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
finish();
}
});
builder.setNegativeButton("NO", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
});
builder.show();
}
类似地,您可以管理多个片段,而无需迭代循环和popbackstack.
Similarly You Can Manage Multiple Fragment Without Iterating loop and popbackstack.
注意::加载片段时,请使用替换"而不是像下面的代码那样添加
NOTE: When You Load Fragment Use Replace instead of add like below Code
getSupportFragmentManager().beginTransaction().replace(R.id.maincontainer, new AboutAppFragment()).addToBackStack(null).commit();
这篇关于更换后如何返回第一个Android Fragment的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!