如何使用 ById 或 ByTag 获取 android 中的当前片段
How to get current fragment in android using ById or ByTag
在我的主 activity 中,我有一个用于显示片段的框架布局
现在想象一下,我有 3 个片段对象:
Fragment1 f1 = new Fragment1();
Fragment2 f2 = new Fragment2();
Fragment3 f3 = new Fragment3();
我使用以下方法设置此片段:
fragTrans.replace(android.R.id.content, f1);
fragTrans.addToBackStack(null);
fragTrans.commit();
现在在不同的时间点,应用程序可能在框架布局中具有三个片段之一(片段的数量可能会有所不同)。
所以,在某些时候,如果我想确定哪些片段当前显示在框架布局中,我该怎么做?
我的目的:
fragment2 有 2 个状态,其中布尔状态可以是 true 或 false,如果状态为 true,并且按下后退按钮我想做一些事情并将状态设置为 false 如果按下后退按钮我会打电话super.onBackPressed() 但如果它设置为 true 并且如果当前片段 3 可见,首先我想转到片段 2,然后将状态更改为 false 然后 super.onBackPressed()
如果我能识别出当前可见的片段,那将是小菜一碟
试试这个
Fragment fragment = (Fragment)supportFragmentManager.findFragmentById(R.id.fragment_container)
Your Solution is here
1. 首先用这一行替换片段替换行。
fragTrans.replace(android.R.id.content, f1,f1.getClass.getName());
这里f1.getClass,getName()
是当前Fragment的key。它为您提供替换片段或当前替换片段的名称。
FragmentManager manager = getSupportFragmentManager();
Fragment1 fragment1 = (Fragment1) manager.findFragmentByTag(Fragment1.class.getName());
Fragment2 fragment2 = (Fragment2) manager.findFragmentByTag(Fragment2.class.getName());
Fragment3 fragment3 = (Fragment3) manager.findFragmentByTag(Fragment3.class.getName());
if (fragment1 != null) {
Log.e(TAG, "Current fragment is Fragment1");
}else if(fragment2 != null) {
Log.e(TAG, "Current fragment is Fragment2");
}else if(fragment3 != null) {
Log.e(TAG, "Current fragment is Fragment3");
} else {
Log.e(TAG, "Fragment 1-2-3 is null");
}
如果你第一次在BackPress上做了一些事情,请按照下面的代码,
@Override
public void onBackPressed() {
if (isBackPress) { //Default is false
super.onBackPressed();
} else {
// On First time click do something
isBackPress=true;
}
}
在我的主 activity 中,我有一个用于显示片段的框架布局 现在想象一下,我有 3 个片段对象:
Fragment1 f1 = new Fragment1();
Fragment2 f2 = new Fragment2();
Fragment3 f3 = new Fragment3();
我使用以下方法设置此片段:
fragTrans.replace(android.R.id.content, f1);
fragTrans.addToBackStack(null);
fragTrans.commit();
现在在不同的时间点,应用程序可能在框架布局中具有三个片段之一(片段的数量可能会有所不同)。
所以,在某些时候,如果我想确定哪些片段当前显示在框架布局中,我该怎么做?
我的目的: fragment2 有 2 个状态,其中布尔状态可以是 true 或 false,如果状态为 true,并且按下后退按钮我想做一些事情并将状态设置为 false 如果按下后退按钮我会打电话super.onBackPressed() 但如果它设置为 true 并且如果当前片段 3 可见,首先我想转到片段 2,然后将状态更改为 false 然后 super.onBackPressed()
如果我能识别出当前可见的片段,那将是小菜一碟
试试这个
Fragment fragment = (Fragment)supportFragmentManager.findFragmentById(R.id.fragment_container)
Your Solution is here
1. 首先用这一行替换片段替换行。
fragTrans.replace(android.R.id.content, f1,f1.getClass.getName());
这里f1.getClass,getName()
是当前Fragment的key。它为您提供替换片段或当前替换片段的名称。
FragmentManager manager = getSupportFragmentManager();
Fragment1 fragment1 = (Fragment1) manager.findFragmentByTag(Fragment1.class.getName());
Fragment2 fragment2 = (Fragment2) manager.findFragmentByTag(Fragment2.class.getName());
Fragment3 fragment3 = (Fragment3) manager.findFragmentByTag(Fragment3.class.getName());
if (fragment1 != null) {
Log.e(TAG, "Current fragment is Fragment1");
}else if(fragment2 != null) {
Log.e(TAG, "Current fragment is Fragment2");
}else if(fragment3 != null) {
Log.e(TAG, "Current fragment is Fragment3");
} else {
Log.e(TAG, "Fragment 1-2-3 is null");
}
如果你第一次在BackPress上做了一些事情,请按照下面的代码,
@Override
public void onBackPressed() {
if (isBackPress) { //Default is false
super.onBackPressed();
} else {
// On First time click do something
isBackPress=true;
}
}