2013-12-16 3 views
2

Я делаю викторину, и для каждого уровня есть текстовое поле для вопроса и текстовое поле для ввода вашего ответа. Там будет много уровней, поэтому вместо того, чтобы иметь тонны и тонны классов Java и XML-файлов, мне было интересно, есть ли более быстрое решение?Заполнение TextView с различными строками для разных уровней

Я думал о наличии одного Java-класса, который заполняет один и тот же TextView с разными строками для разных уровней. Это возможно? Думаю, мне, возможно, придется использовать базу данных?

Код, который у меня есть на данный момент что-то вроде этого (XML):

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/RelativeLayout" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:gravity="fill_horizontal" 
android:layout_margin="25dp" 
android:orientation="vertical" > 

<TextView 
    android:id="@+id/tutorialWelcome" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" 
    android:text="@string/tutorial_step_four_a" 
    android:textSize="@dimen/text_size" 
    android:textStyle="bold" /> 

<EditText 
    android:id="@+id/editText1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentLeft="true" 
    android:layout_toLeftOf="@+id/enterButton" 
    android:hint="@string/answerhere" 
    android:inputType="text" 
    android:textSize="@dimen/text_size" > 

    <requestFocus /> 
</EditText> 

<TextView 
    android:id="@+id/textView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/tutorialWelcome" 
    android:layout_centerHorizontal="true" 
    android:text="@string/tutorial_step_four_b" 
    android:textSize="@dimen/text_size" /> 

<ImageButton 
    android:id="@+id/enterButton" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentRight="true" 
    android:contentDescription="@string/nextbutton" 
    android:src="@drawable/ic_action_send_now" 
    style="?android:attr/borderlessButtonStyle"/> 

Любая помощь будет признателен!

+0

Кажется, что вам нужно создать нестандартный вид. и публичная функция/конструктор для установки текста для текстового вида –

+0

Как вы пишете мелочи, не используя базу данных ?! O_o - Да, это DB. Имейте некоторые пользовательские классы, которые представляют структуру db и просто звоните: textView.setText(myObj.getQuestionText(iLevelNum); или что-то подобное. – LokiSinclair

ответ

1

Есть несколько вариантов:

  • магазин ваши вопросы в strings.xml, а затем использовать GetString (R.string.id_of_question_you_want) для получения на вопрос, а затем отобразить его

  • магазин вопросы в базе данных SQLite

  • магазин вопросы в файле, и вам нужно будет написать функции для чтения файла

EDIT:

Вы также можете использовать массив строк в XML, а затем, на основании которого отображается в данный момент проблем качества, заселить из массива, например:

  • есть свой quesitons.xml где вы определяете массив вопросов:

    <?xml version="1.0" encoding="utf-8"?> 
    <resources> 
        <string-array name="questions_array"> 
         <item>Question 1 content</item> 
         <item>Question 2 content</item> 
         <item>Question 3 content</item> 
         <item>Question 4 content</item> 
        </string-array> 
    </resources> 
    
  • в вашей деятельности, вы можете получить эти вопросы в массиве:

    Resources res = getResources(); 
    String[] questions = res.getStringArray(R.array.questions_array); 
    
  • затем, следить за какой вопрос должен быть отображен в настоящее время, и получить строку из массива в вашей деятельности, заполняющее расположение:

    int questionNumber = 5; 
    
    textViewQuestion.setText(questions[questionNumber]); 
    

Только не забудьте проверить границы, в противном случае вы получите исключение, если ваш номер вопроса больше, чем количество вопросов в массиве. Помните, что массивы в Java начинаются с индекса 0.

и, возможно, некоторые другие ...

Проверить the docs для получения информации о хранении данных.

+1

Это имеет смысл. Хотя я немного смущен.Как вы думаете, мне понадобится куча инструкций «если», чтобы установить условие? Например, если это первый уровень, используйте вопрос первого уровня? Если да, как вы думаете, я могу это реализовать. – caffro

+1

Другой - возможно, более полезный - вариант заключается в том, чтобы хранить вопросы в массиве в XML-файле. См. Мой обновленный ответ. Затем в вашей деятельности вы можете использовать индекс, чтобы получить правильный вопрос из массива. – Melquiades

Смежные вопросы