我正在进行片段添加/更改,因为我是初学者,我会告诉你,我是怎么做的。
如果有人能用更少的代码做得更好,请告诉我。
所以我有ActivityUtils:
public abstract class ActivityUtils extends AppCompatActivity{
public static void addFragment(FragmentManager manager, Fragment fragment, int frameId){
FragmentTransaction transaction = manager.beginTransaction();
transaction.add(frameId, fragment);
transaction.addToBackStack(null);
transaction.commit();
}
public static void changeFragment(FragmentManager manager, Fragment fragment, int frameId){
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(frameId, fragment);
transaction.addToBackStack(null);
transaction.commit();
}
}
在MainActivity中我有两种方法:
public void addFragment(Fragment fragment){
ActivityUtils.addFragment(getSupportFragmentManager(), fragment, R.id.fragmentContainer);
}
public void changeFragment(Fragment fragment){
ActivityUtils.changeFragment(getSupportFragmentManager(), fragment, R.id.fragmentContainer);
}
现在我们可以调用这样的方法:
示例:
changeFragment(DatabaseFragment.getInstance());
但是我们还需要像这样的每个阵营中的方法:
我们的例子
public static Fragment getInstance(){
return new DatabaseFragment();
}
出了什么问题?或者专业程序员做得更好?
答案 0 :(得分:0)
到目前为止,您的代码看起来很好。您唯一可以改进的是避免重复代码。看看这个:
public abstract class ActivityUtils extends AppCompatActivity{
public static void addFragment(FragmentManager manager, Fragment fragment, int frameId){
performTask(manager, fragment, frameId, 1);
}
public static void changeFragment(FragmentManager manager, Fragment fragment, int frameId){
performTask(manager, fragment, frameId, 2);
}
private static void performTask(FragmentManager manager, Fragment fragment, int frameId, int taskType) {
FragmentTransaction transaction = manager.beginTransaction();
switch(taskType){
case 1:
transaction.add(frameId, fragment);
break;
case 2:
transaction.replace(frameId, fragment);
break;
}
transaction.addToBackStack(null);
transaction.commit();
}
}
目前你可能还有更多的代码行,但如果你决定添加所有具有相同模式的方法,除了执行该操作的这一行,那么上面的方法就更好了。
答案 1 :(得分:0)
在MainActivity中尝试以下方法以轻松替换片段。
public void replaceHomeFragment(Fragment fragment) {
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.container_fragment, fragment);
fragmentTransaction.commit();
}
如果要在后台堆栈中添加替换的片段,只需在fragmentManager.beginTransaction之后添加此行。
fragmentTransaction.addToBackStack(NULL);
我们使用不同的方法来替换片段并维护后台,同时我们单击后退按钮或直接将用户导航到主Homefragment。所以,如果你还需要更多东西,你可以联系我。