загрузить один фрагмент дважды в одном задании с двумя вопросами из локального файла json - PullRequest
0 голосов
/ 14 апреля 2019

У меня есть локальный 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

1 Ответ

0 голосов
/ 14 апреля 2019

Хотя я думаю, что у вас будет несколько более подробных вопросов по мере продвижения, похоже, вам нужно какое-то общее руководство, чтобы действительно начать.

Для начала я бы предложил вам не использовать одинаковый фрагмент для каждого из ваших двух отображаемых вопросов, а два отдельных экземпляра одного и того же класса фрагмента. Например, я думаю, вы хотели бы иметь что-то вроде этого:

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

Похоже, у вас есть список вопросов, и вы просто хотите отображать два вопроса одновременно, поэтому я думаю, что единственное состояние, которое вам нужно поддерживать, это то, что данные номера вопроса должны отображаться в questionOneFragment (questionTwoFragment должен отобразить данные для вопроса в списке после второго вопроса).

Все, что вам для этого потребуется, - это одно целое число firstDisplayedQuestion, которое вы увеличиваете или уменьшаете в зависимости от нажатия на кнопки prev и next. Вам нужно управлять границами этой переменной, чтобы она не опускалась ниже 0 или выше 1 ниже последнего элемента в вашем списке.

В вашем классе BaseFragment вы должны иметь методы, которые устанавливают элементы пользовательского интерфейса, которые вы хотите отображать. Затем, когда нажимается кнопка prev или next, вы соответственно обновляете firstDisplayedQuestion. Затем вы также получаете данные для вопроса в списке, соответствующие firstDisplayedQuestion, и вызываете методы настройки отображения для questionOneFragment, используя эти данные. Затем вы получаете данные для вопроса в списке, соответствующие firstDisplayedQuestion + 1, и используете эти данные для установки элементов отображения questionTwoFragment

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...