当前位置: 首页 > 知识库问答 >
问题:

用碎片活动和碎片替换TabActivity

蒋正平
2023-03-14

由于不推荐使用TabActivity,我需要找到一种方法来使用片段。在我知道它如何工作之前,我已经使用了碎片,但我需要一个指南来创建我的标签主机与碎片活动。我在互联网上找到了几个例子,它们都是关于将片段放入标签的容器中的。

共有1个答案

丘飞
2023-03-14

由于不推荐使用TabActivity,我需要找到一种方法来使用片段。

如果您不想使用tabactivity-忘记将fragmentactivities放入tab的内容。

我提醒您可以使用tabwidget而不使用tabactivity。因此您可以尝试以下解决方案:

    null
public class Test extends FragmentActivity {

private Fragment1 fragment1=new Fragment1();
private Fragment2 fragment2=new Fragment2();
private Fragment3 fragment3=new Fragment3();

private void showFragment1(){
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.replace(R.id.fragments_container, fragment1);
    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
    ft.commit();
}

private void showFragment2(){
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.replace(R.id.fragments_container, fragment2);
    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
    ft.commit();
}

private void showFragment3(){
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.replace(R.id.fragments_container, fragment3);
    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
    ft.commit();
}

@Override
protected void onCreate(Bundle arg0) {
    // TODO Auto-generated method stub
    super.onCreate(arg0);
    setContentView(R.layout.fragmentactivity_layout);
}
}

如果这样做,fragmentX变量将不会在每次将它们放入fragment_container中时被删除。它们将在fragmentactivity活着的时候活着。看看碎片的生命周期。只有OnCreateViewOnDestroyView片段方法在将一个片段替换为另一个片段时会一次又一次地调用。

另外,Fragments还有它们的OnSaveInstanceState方法,您可以在其中保存片段的状态。例如:用户在fragment1的edittext中键入了他的名字。如果希望在用户发现其他片段时保留此数据(名称字符串),则应

1.在fragment1的onsaveInstanceState方法
2中保存名称字符串。在fragment1的oncreateview方法中,如果savedInstanceState bundle不是null,请使用从bundle中获得的字符串填充edittext。

public class Fragment1 extends Fragment {

EditText nameEditText;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,  Bundle savedInstanceState) {
    super.onCreateView(inflater, container, savedInstanceState);

    View fragment1View=inflater.inflate(R.layout.fragment1_layout, container, false);
    nameEditText=(EditText) fragment1View.findViewById(R.id.edittext_name);

    //check for saved data. if it is not null - fill your edittext with saved string
    if(savedInstanceState!=null){
        String nameString=(String) savedInstanceState.get("nameString");
        nameEditText.setText(nameString);
    }
    return fragment1View;
}

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    //save data that user have entered
    outState.putString("nameString", nameEditText.getText().toString());
}

您可以在保存前检查数据。我希望我的观点现在已经清楚了。

另外,如果在片段oncreateview()方法中调用setRetaInstance(true)系统将尝试保存片段的状态(包括所有输入数据)。链接到描述

 类似资料:
  • 我可以使用一个片段作为一个活动吗?我已经创建了一个片段,但我希望它有像活动一样的功能,所以我使用片段扩展碎片活动。然而,我有一个带有碎片的导航抽屉。当我更改为“扩展碎片活动”时,我的代码有问题?请给我指路。

  • 我读过很多关于这方面的文章,但也有2012年或更早的文章。 (我只是打算从数据库中读取和插入一些数据。)

  • 我有一个大型Android游戏,其中每个逻辑屏幕都有一个活动。(启动画面、开始画面、关卡选择器、游戏画面和设置是不同的活动)。现在一切正常。 如果我重写所有内容,使得只有一个活动,逻辑屏幕是碎片,会减少RAM或CPU消耗吗?

  • 我是Android新手。我想建立一个标签格式的应用程序。我找到了许多使用了活动的文档。在许多情况下,还使用了碎片活动。我不确定从哪一个开始更好。请建议我是否应该使用或以选项卡格式开始开发?

  • 这似乎是一个具有挑战性的动画,但我有一种感觉,这可以很容易地完成。我正在尝试实现如下所示的片段之间的动画(请参阅第二和第三象限) 进入和退出并不难,但是预显示下一张和上一张卡片的屏幕以及无缝切换到下一张卡片超出了我的知识范围。如果有人制作过类似的动画,请给我一些指点。 编辑 Android的官方文档在点击时过渡,即当用户点击页面缩小以显示最后一页和上一页时,滑动将其移动到下一页。我的要求是将页面保

  • 我一直对此感到沮丧,也找不到好的答案,所以希望这里有人能提供指导。 我有一个片段相当广泛地使用了。片段调用(返回null)时,我经常受到错误的困扰。我假设发生这些情况是因为在附加活动之前或分离活动之后调用了片段中的某些方法。 在我的代码中处理这个问题的正确方法是什么?我不想让这个成语到处乱扔, 一些人建议在暂停时取消任务,但这意味着标准习惯用语, 无法使用。这意味着每个执行的都需要跟踪到完成或取消