获取片段名称或 ID
Get the fragment name or id
我有一个 framelayout
在我的 Activity
中调用了一次,在其他 Fragment
中多次调用(经过 Activity
的相同 framelayout
).
在我的MainActivity.class
中,我需要知道我的framelayout
在哪个片段中。
例如,我需要知道 framelayout
是使用 MyFragment1.class
还是 MyFragment2.class
.
我需要这样的东西(在这个例子中,log
必须告诉我 “你在 MyFragment1”):
FrameLayout frameLayout = (FrameLayout) findViewById(R.id.framelayout);
getSupportFragmentManager().beginTransaction()
.replace(R.id.framelayout,new MyFragment1())
.commit();
if (framelayout.getname.equals("package.MyFragment1.class"))
Log.d("debug", "you are in MyFragment1");
else if (framelayout.getname.equals("package.MyFragment2.class"))
Log.d("debug", "you are in MyFragment2");
我该怎么做?
在每个 Fragment class 中,只需在 onCreateView
方法中定义 Log。
您需要检查使用像
这样的实例
您需要检查您的片段对象:
public Fragment getVisibleFragment(){
FragmentManager fragmentManager = MainActivity.this.getSupportFragmentManager();
List<Fragment> fragments = fragmentManager.getFragments();
if(fragments != null){
for(Fragment fragment : fragments){
if(fragment != null && fragment.isVisible())
return fragment;
}
}
return null;
}
fragment = getVisibleFragment();
if (fragment instance of MyFragment1){
}
您需要使用以下代码从 FrameLayout
获取运行时 片段
Fragment fragmentInFrame = (Fragemnt)getSupportFragmentManager()
.findFragmentById(R.id.frag2_view);
然后您可以使用 instanceof
检查片段类型
if (fragmentInFrame instanceof MyFragment1){
Log.d("debug", "you are in MyFragment1");
}else if (fragmentInFrame instanceof MyFragment2){
Log.d("debug", "you are in MyFragment2");
}
final Fragment fragmentInFrame = getSupportFragmentManager().findFragmentById(R.id.framelayout);
getSupportFragmentManager().beginTransaction()
.replace(R.id.framelayout, new MyFragment1())
.commit();
您正在替换此处的片段。所以 fragmentInFrame
仍将引用旧片段。
因此替换后您需要通过再次查找来更新 fragmentInFrame
变量。
fragmentInFrame = getSupportFragmentManager().findFragmentById(R.id.framelayout);
现在检查 fragmentInFrame
就可以了。
不要忘记删除 final
关键字。
我找到了解决方案
getSupportFragmentManager().beginTransaction()
.replace(R.id.framelayout,new MyFragment1())
.commit();
final Fragment fragmentInFrame = getSupportFragmentManager().findFragmentById(R.id.framelayout);
if (fragmentInFrame instanceof MyFragment1){
Log.d("debug", "you are in MyFragment1");
} else if (fragmentInFrame instanceof MyFragment2) {
Log.d("debug", "you are in MyFragment2");
}
我有一个ContentFrameLayout
这个ID是Fragment_Main
你可以使用FrameLayout
给Activity
写这段代码
final Fragment fragmentInFrame = getSupportFragmentManager().findFragmentById(R.id.Fragment_Main);
if(fragmentInFrame instanceof YourFragment){
}
给Fragment
写这段代码
final Fragment fragmentInFrame =getActivity().getSupportFragmentManager().findFragmentById(R.id.Fragment_Main);
if(fragmentInFrame instanceof YourFragment){
}
我有一个 framelayout
在我的 Activity
中调用了一次,在其他 Fragment
中多次调用(经过 Activity
的相同 framelayout
).
在我的MainActivity.class
中,我需要知道我的framelayout
在哪个片段中。
例如,我需要知道 framelayout
是使用 MyFragment1.class
还是 MyFragment2.class
.
我需要这样的东西(在这个例子中,log
必须告诉我 “你在 MyFragment1”):
FrameLayout frameLayout = (FrameLayout) findViewById(R.id.framelayout);
getSupportFragmentManager().beginTransaction()
.replace(R.id.framelayout,new MyFragment1())
.commit();
if (framelayout.getname.equals("package.MyFragment1.class"))
Log.d("debug", "you are in MyFragment1");
else if (framelayout.getname.equals("package.MyFragment2.class"))
Log.d("debug", "you are in MyFragment2");
我该怎么做?
在每个 Fragment class 中,只需在 onCreateView
方法中定义 Log。
您需要检查使用像
这样的实例您需要检查您的片段对象:
public Fragment getVisibleFragment(){
FragmentManager fragmentManager = MainActivity.this.getSupportFragmentManager();
List<Fragment> fragments = fragmentManager.getFragments();
if(fragments != null){
for(Fragment fragment : fragments){
if(fragment != null && fragment.isVisible())
return fragment;
}
}
return null;
}
fragment = getVisibleFragment();
if (fragment instance of MyFragment1){
}
您需要使用以下代码从 FrameLayout
Fragment fragmentInFrame = (Fragemnt)getSupportFragmentManager()
.findFragmentById(R.id.frag2_view);
然后您可以使用 instanceof
if (fragmentInFrame instanceof MyFragment1){
Log.d("debug", "you are in MyFragment1");
}else if (fragmentInFrame instanceof MyFragment2){
Log.d("debug", "you are in MyFragment2");
}
final Fragment fragmentInFrame = getSupportFragmentManager().findFragmentById(R.id.framelayout);
getSupportFragmentManager().beginTransaction()
.replace(R.id.framelayout, new MyFragment1())
.commit();
您正在替换此处的片段。所以 fragmentInFrame
仍将引用旧片段。
因此替换后您需要通过再次查找来更新 fragmentInFrame
变量。
fragmentInFrame = getSupportFragmentManager().findFragmentById(R.id.framelayout);
现在检查 fragmentInFrame
就可以了。
不要忘记删除 final
关键字。
我找到了解决方案
getSupportFragmentManager().beginTransaction()
.replace(R.id.framelayout,new MyFragment1())
.commit();
final Fragment fragmentInFrame = getSupportFragmentManager().findFragmentById(R.id.framelayout);
if (fragmentInFrame instanceof MyFragment1){
Log.d("debug", "you are in MyFragment1");
} else if (fragmentInFrame instanceof MyFragment2) {
Log.d("debug", "you are in MyFragment2");
}
我有一个ContentFrameLayout
这个ID是Fragment_Main
你可以使用FrameLayout
给Activity
写这段代码
final Fragment fragmentInFrame = getSupportFragmentManager().findFragmentById(R.id.Fragment_Main);
if(fragmentInFrame instanceof YourFragment){
}
给Fragment
写这段代码
final Fragment fragmentInFrame =getActivity().getSupportFragmentManager().findFragmentById(R.id.Fragment_Main);
if(fragmentInFrame instanceof YourFragment){
}