当我更改 fragment 时,我想将新 fragment 与当前 fragment 进行比较。如果相同,则无需更换。
我试过了
public void displayFragment(Fragment fragment){
FragmentManager fm = getSupportFragmentManager();
Fragment currentFragment = fm.findFragmentById(R.id.content_frame);
if(!currentFragment.equals(fragment))
getSupportFragmentManager().beginTransaction().addToBackStack(null).replace(R.id.content_frame, fragment).commit();
}
但它不起作用,即使新 fragment 相同, fragment 也会更改
解决方案? 谢谢
编辑
解决方案:
public void displayFragment(Fragment fragment){
FragmentManager fm = getSupportFragmentManager();
Fragment currentFragment = fm.findFragmentById(R.id.content_frame);
if(!fragment.getClass().toString().equals(currentFragment.getTag())){
getSupportFragmentManager()
.beginTransaction()
.addToBackStack(null)
.replace(R.id.content_frame, fragment, fragment.getClass().toString()) // add and tag the new fragment
.commit();
}
}
最佳答案
识别 fragment 的一种方法是给它们标签:
public void displayFragment(Fragment fragment, String tag){
FragmentManager fm = getSupportFragmentManager();
Fragment currentFragment = fm.findFragmentById(R.id.content_frame);
if(!tag.equals(currentFragment.getTag())
getSupportFragmentManager()
.beginTransaction()
.addToBackStack(null)
.replace(R.id.content_frame, fragment, tag) // add and tag the new fragment
.commit();
}
编辑:psv 评论的替代版本,使用类名作为标签:
public void displayFragment(Fragment fragment){
FragmentManager fm = getSupportFragmentManager();
Fragment currentFragment = fm.findFragmentById(R.id.content_frame);
if(!fragment.getClass().toString().equals(currentFragment.getTag()))
{
getSupportFragmentManager()
.beginTransaction()
.addToBackStack(null)
.replace(R.id.content_frame, fragment, fragment.getClass().toString()) // add and tag the new fragment
.commit();
}
}
关于Android比较两个 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18406524/