2016-07-22 5 views
0

Попытка получить схватывание на андроид Повсеместно Большой путеводитель ботаник ранчо, я наткнулся на этом примере:Android TextView ресурс не найден

super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_quiz); 
    mQuestionTextView = (TextView) findViewById(R.id.question_text_view); 
    int question = mQuestionBank[mCurrentIndex].getTextResId(); 
    mQuestionTextView.setText(question); 

где mQuestionBank

private Question[] mQuestionBank = new Question[] { 
     new Question(R.string.question_oceans, true), 
     new Question(R.string.question_mideast, false), 
     new Question(R.string.question_africa, false), 
     new Question(R.string.question_americas, true), 
     new Question(R.string.question_asia, true), 
}; 

и те, которые были определены в strings.xml

<string name="question_oceans">The Pacific Ocean is larger than the Atlantic Ocean.</string> 
<string name="question_mideast">The Suez Canal connects the Red Sea and the Indian Ocean.</string> 
<string name="question_africa">The source of the Nile River is in Egypt.</string> 
<string name="question_americas">The Amazon River is the longest river in the Americas.</string> 
<string name="question_asia">Lake Baikal is the world\'s oldest and deepest freshwater lake.</string> 

Однако я получаю Ресурс не найден Исключение. (textResId является первым полем класса вопроса)

EDIT:

Вопрос Класс

public class Question { 
private int mTextResId; 
private boolean mAnswerTrue; 

public Question(int mTextResId, boolean mAnswerTrue) { 
    mTextResId=mTextResId; 
    mAnswerTrue=mAnswerTrue; 
} 

public int getTextResId() { 
    return mTextResId; 
} 

public void setTextResId(int textResId) { 
    mTextResId = textResId; 
} 

public boolean isAnswerTrue() { 
    return mAnswerTrue; 
} 

public void setAnswerTrue(boolean answerTrue) { 
    mAnswerTrue = answerTrue; 
} 
+0

Что такое mCurrentIndex? –

+0

опубликуйте свой вывод logcat –

+0

mCurrentIndex является частным int = 0 – Boulbi

ответ

0

Используйте этот стандартный код:

Используйте String массив в YOUT String.xml файл

<string-array name="questions"> 
    <item>The Pacific Ocean is larger than the Atlantic Ocean.</item> 
    <item>The Suez Canal connects the Red Sea and the Indian Ocean.</item> 
    <item>The source of the Nile River is in Egypt.</item> 
    <item>The Amazon River is the longest river in the Americas.</item> 
    <item>Lake Baikal is the world\'s oldest and deepest freshwater lake.</item> 
</string-array> 

Теперь используйте нижеприведенный код в своем классе java

super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_quiz); 
String[] mQuestionBank = getResources().getStringArray(R.array.questions); 
mQuestionTextView = (TextView) findViewById(R.id.question_text_view); 
String question = mQuestionBank[mCurrentIndex]; 
mQuestionTextView.setText(question); 
2

Попробуйте это и дайте мне знать результат. mQuestionTextView.setText(getResources().getString(question));

изменить также раздел конструктора класса Вопроса

public Question(int mTextResId, boolean mAnswerTrue) { 
    this.mTextResId=mTextResId; 
    this.mAnswerTrue=mAnswerTrue; 
} 
+0

Этот результат получается на том же выходе. – Boulbi

+0

Пожалуйста, поделитесь разделить класс «Вопрос» слишком – lal

+0

Пожалуйста, измените строителю в классе Вопрос общественного Вопрос (INT mTextResId, логическое mAnswerTrue) { this.mTextResId = mTextResId; this.mAnswerTrue = mAnswerTrue; } – lal

0

Каждого аргумент конструктору тень одного из полого объекта - внутри конструктора класса Question, mTextResId является локальной копией застройщика, первый аргумент & mAnswerTrue - это локальная копия второго аргумента конструктора.

Для ссылки на Вопрос поле mTextResId, конструктор должен использовать this.mTextResId & & this.mAnswerTrue. Попробуйте

public Question(int mTextResId, boolean mAnswerTrue) { 
    this.mTextResId = mTextResId; 
    this.mAnswerTrue = mAnswerTrue; 
} 
Смежные вопросы