Динамическая горизонтальная прокрутка в Android - PullRequest
0 голосов
/ 29 декабря 2011

Я хочу это: я создаю несколько экранов, где у меня будут вопросы типа

1.The capital of India is
a. Delhi
b. Bangalore
c. Chennai

2. Are you sure?
a. Yes
b. No

Теперь, как я хочу это на одном экране, я хочу вопрос 1, и при смахивании (горизонтальная прокрутка) ядолжен увидеть вопрос 2. И варианты должны быть переключатели.Как Android-нуб я знаю, что должен использовать горизонтальную прокрутку, но у меня может быть 100 таких вопросов в файле sqlite: как мне сделать это динамически?После того, как я вызову задание, из файла нужно прочитать 100 вопросов, и у меня должно быть 100 таких прокручиваемых экранов.Помогите, я не могу найти много об этом на сайте Android and Dev, или здесь.

Ответы [ 2 ]

1 голос
/ 30 декабря 2011

Как уже упоминалось, лучшим вариантом является прослушивание жеста смахивания и замена данных в представлении.Т.е. вам не нужно создавать несколько представлений как таковых для каждого вопроса.Вот что я бы сделал: создайте представление, где XML будет более или менее похожим (обратите внимание, я пропустил, включая атрибуты mandetory, такие как layoutheight и layoutwidth, вам нужно использовать их в xml)

<LinearLayout
  android:orientation="vertical">
   <TextView
      android:id="+@id/questiontext"/>
   <RadioGroup
      android:id="+@/answersgroup"/>
</LinearLayout>

Сейчас в деятельности:

  1. Реализовать сенсорный приемник и написать код для обнаружения удара.(приведенный выше ответ от ali.chousein содержит отличную ссылку, чтобы получить хорошую справку о том, как).
  2. При начальной загрузке задайте первый вопрос к виду:

    QandA_CustomDataObject dataItem = questionArr.get(0);
    ((TextView)findViewById(R.id.questiontext)).setText(dataItem.question);
    int answearrsize = dataItem.answers.size();
    RadioGroup rg = ((RadioGroup)findViewById(R.id.answersgroup));
    for(int i=0;i<answearrsize;i++) //Dynamically create the radio buttons
    {
        AnswerObj ao = dataItem.get(0).answers.get(i);
        RadioButton rb = new RadioButton(this);
        rb.setText(ao.text);
        rb.setTag(ao.isCorrectAnswer); //A string saying TRUE or FALSE
        rg.addView(rb);
    }
    
  3. Теперь о части кода после выполнения проверки жеста для пролистывания вправоили проведите влево

    //Lets say you ++ or -- a variable named currentQuestionNumber based on the swipe direction)
    QandA_CustomDataObject dataItem = questionArr.get(currentQuestionNumber);
    ((TextView)findViewById(R.id.questiontext)).setText(dataItem.question);
    int answearrsize = dataItem.answers.size();
    RadioGroup rg = ((RadioGroup)findViewById(R.id.answersgroup));
    rg.removeAllViews(); //Clears away the last questions answer options
    for(int i=0;i<answearrsize;i++) //Dynamically create the radio buttons
    {
        AnswerObj ao = dataItem.get(0).answers.get(i);
        RadioButton rb = new RadioButton(this);
        rb.setText(ao.text);
        rb.setTag(ao.isCorrectAnswer); //A string saying TRUE or FALSE
        rg.addView(rb);
    }         
    

Теперь есть несколько альтернативных способов сделать это.Использование адаптеров, представлений списков и т. Д. Я произвольно назвал все классы структуры данных, но я надеюсь, что вы поняли ... это больше способ справиться с переходом от одного вопроса к другому, используя ту же активность (экран), которую я хотелуказать вам.

0 голосов
/ 30 декабря 2011

Вместо горизонтального обзора, почему бы вам не обнаружить жест смахивания и не изменить содержание своей деятельности? Вы можете найти много указателей на обнаружение жеста смахивания. Одним из них является: Обнаружение жестов Fling на макете сетки

...