Android 安卓:更好的碎片使用方式

Android 安卓:更好的碎片使用方式,android,android-fragments,Android,Android Fragments,我想不出更好的问题标题:( 在我的应用程序中,我需要一个类似提问者的东西,有10多个问题,每次1个问题 我所做的是: 让1个活动(比如MainActivity)在其onCreate()中以编程方式添加一个片段(比如Frag_1) 在Frag_1中,我有一个界面onButtonClickedListener,其中有一个方法onClicked,以获取对活动的回调,以了解单击了哪个选项等 在MainActivity中实现了这个接口的onclick方法,在该方法中,我将片段更改为Frag_2(第二个问题

我想不出更好的问题标题:(

在我的应用程序中,我需要一个类似提问者的东西,有10多个问题,每次1个问题

我所做的是:

  • 让1个活动(比如MainActivity)在其onCreate()中以编程方式添加一个片段(比如Frag_1)

  • 在Frag_1中,我有一个界面
    onButtonClickedListener
    ,其中有一个方法
    onClicked
    ,以获取对活动的回调,以了解单击了哪个选项等

  • 在MainActivity中实现了这个接口的onclick方法,在该方法中,我将片段更改为Frag_2(第二个问题),以此类推

  • 问题是:

    我最终得到了10个片段,我的MainActivity实现了10个接口,每个片段1个

    编辑:

      @Override
       public void onSaveInstanceState(Bundle outState) {
           super.onSaveInstanceState(outState);
           outState.putInt("curChoice", mCurCheckPosition);
       }
    
    每个问题都不相同。问题的答案选项是EditText/Spinner/RadioButtons等,因此我不能使用相同的片段,而只是更改问题和答案选项文本

    有没有更好更有效的方法来解决这个问题

    谢谢你

    你就快到了。 为要实现的MainActivity创建更广泛/通用的接口。 可能是这样的
    public void fragClickCallback(int fragId,Bundle data);

    这样,在您的实现中,您可以创建一个
    switch()case
    ,以了解问题的来源,并且您的包可以为不同类型的答案打包不同的键(int表示Radio按钮/微调器,String表示开放式答案,等等)

    并且确保在每个片段事务上使用
    .replace(…)
    删除之前的片段

    编辑

    此外,有一些聪明的方法可以构建片段,而不必创建数十亿个片段。可以有多少不同类型的问题?让我们计算一下:

    • 多项选择(单答案)->整数(索引)
    • 多项选择(多个答案)->整数(标志)
    • 数字输入->浮动/双精度
    • 编辑文本->字符串
    • 日期选择器->长(历元)
    • 时间选择器->3个整数(?)
    因此,我们有6个片段和6种处理
    switch语句的方法,现在只需将正确的参数传递给片段

    编辑:

      @Override
       public void onSaveInstanceState(Bundle outState) {
           super.onSaveInstanceState(outState);
           outState.putInt("curChoice", mCurCheckPosition);
       }
    
    然后在片段ActivityCreated()上

    这些代码是从我建议你进一步阅读该页复制的。
    该示例是恢复光标位置,但您可以使用它恢复以前的用户答案(文本、整数、浮点等).

    所有的皇后区都有相似的结构吗?如果有,你可能不用使用viewpager和fragmentPagerAdapterNo。有些会有单选按钮/微调器/编辑文本等选项。不得不说,你的问题问得很好。但最好在问题本身中添加你对Marco的回答。那么,可能会有多少问题,我会问我最多有6个片段,只需准确地更改它们的文本/选项即可。您可以创建一个
    捆绑包
    ,并将其作为
    setArguments(捆绑包)
    传递给片段,然后在片段内使用
    getArgument()获得它
    我这里有一个小问题。由于用户必须能够返回并检查上一个问题,对于我提供的每个片段替换,addToBackStack。以前它工作正常。但现在,在开始更改文本和选项后,我无法拥有此功能:(.因为,文本与设置为上次查看的片段的文本保持相同。因此,现在除了使用不同的片段之外,没有其他方法了吗?一个词:
    savedInstanceState
    。我将编辑我的答案,然后查看它。