在一个活动中加载单个片段两次,从本地json文件中加载2个问题

问题描述 投票:0回答:1

我有一个调查问题的本地json,我创建了一个片段和活动,我希望在活动上显示下一个和上一个按钮的片段。我的问题是我想同时用两个不同的问题显示相同的片段,并保留下一个和前一个的状态。对于前我有15个问题的列表,我想在同一个活动中显示2个问题和2个相同的片段然后点击下一个我想要保存该状态并再次想要在相同的活动上加载第3个问题并且点击之前我想要这2个片段有1个和2个问题我很困惑,如果有人可以提供帮助,我就不明白怎么做。

这是我的json的一些调查。

{
  "questions": [
    {
      "q_id": "1",
      "que": "how many working vehicles do you have?",
      "q_type": "type_number",
      "ans_id": "",
      "ans": "",
      "Option": [
        {
          "op_id": "1",
          "op_val": "1"
        },
        {
          "op_id": "2",
          "op_val": "2"
        }
      ]
    },
    {
      "q_id": "2",
      "que": "how many peoples are there in your house?",
      "q_type": "type_number",
      "ans_id": "",
      "ans": "",
      "Option": [
        {
          "op_id": "1",
          "op_val": "1"
        },
        {
          "op_id": "2",
          "op_val": "2"
        }
      ]
    }
  ]
}

这是我正在做的代码。我刚刚在一个布局中添加了所有问题我真的不知道如何做我问的问题以及如何保存下一个和前一个按钮的状态,我听说过单身和其他东西,但我不知道如何实现我想。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_registration);


    baseFragment = new BaseFragment();

    questions = Questions.AddAllQue(this);

    LinearLayout linearLayout = new LinearLayout(this);
    linearLayout.setOrientation(LinearLayout.VERTICAL);
    linearLayout.setId(View.generateViewId());

    for(int i=0;i<questions.size();i++ ){

        Bundle bundle = new Bundle();
        bundle.putParcelable("question",questions.get(i));

        getSupportFragmentManager()
                .beginTransaction()
                .add(linearLayout,basefragment)
                .commit();
    }
    flContainer.addView(linearLayout);

}

我想要这样的东西红色标记是单独但相同的基础片段。

然后单击下一个相同的基本片段,只有一个问题,然后再点击上一个像这个图像我的意思是相同的状态。

enter image description here

android android-fragments
1个回答
0
投票

虽然我认为随着您的进步会有更多详细的问题,但听起来您需要一些全面的方向才能真正开始。

首先,我建议您不要为两个显示的问题使用相同的片段,而是使用相同片段类的两个单独实例。例如,我想你会想要这样的东西:

questionOneFragment = new BaseFragment();
questionTwoFragment = new BaseFragment();

看起来你有一个问题列表,你只想一次显示两个问题,所以我认为你需要维护的唯一状态是questionOneFragment应该显示哪个问题数据(questionTwoFragment应该显示问题的数据)问题二之后的清单)。

您需要的只是一个整数firstDisplayedQuestion,您可以根据prevnext按钮的点击增加和减少。您需要管理该变量的边界,使其不低于列表中最后一项的0或高于1。

BaseFragment类中,您需要具有设置要显示的UI元素的方法。然后单击prevnext按钮时,相应地更新firstDisplayedQuestion。然后,您还可以在与firstDisplayedQuestion对应的列表中获取问题的数据,并使用该数据调用questionOneFragment上的显示设置方法。接下来,您将获得与firstDisplayedQuestion + 1对应的列表中的问题数据,并使用该数据设置questionTwoFragment的显示元素

© www.soinside.com 2019 - 2024. All rights reserved.