2014-10-24 3 views
2

이 큰 얼간이 목장 설명서에서 예 :Android TextView.SetText (int resid)는 어떻게 작동합니까?

package com.example.geoquiz; 

import android.os.Bundle; 
import android.support.v7.app.ActionBarActivity; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 
import android.widget.Toast; 

public class QuizActivity extends ActionBarActivity { 
    private Button mTrueButton; 
    private Button mFalseButton; 
    private Button mNextButton; 
    private TextView mQuestionTextView; 
    private TrueFalse[] mQuestionBank = new TrueFalse[] { 
      new TrueFalse(R.string.question_africa, true), 
      new TrueFalse(R.string.question_americas, false), 
      new TrueFalse(R.string.question_asia, false), 
      new TrueFalse(R.string.question_mideast, true), 
      new TrueFalse(R.string.question_oceans, true) 
    }; 
    private int mCurrentIndex = 0; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_quiz); 
     mTrueButton = (Button)findViewById(R.id.true_button); 
     mFalseButton = (Button)findViewById(R.id.false_button); 
     mTrueButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       Toast.makeText(QuizActivity.this, R.string.incorrect_toast, Toast.LENGTH_SHORT).show(); 
      } 
     }); 
     mFalseButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       Toast.makeText(QuizActivity.this, R.string.correct_toast, Toast.LENGTH_SHORT).show(); 
      } 
     }); 

     mQuestionTextView = (TextView)findViewById(R.id.question_text_view); 
     int question = mQuestionBank[mCurrentIndex].getQuestion(); 
     mQuestionTextView.setText(question); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.quiz, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 
     if (id == R.id.action_settings) { 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 
} 

문제의 부분은 이것이다 :

int question = mQuestionBank[mCurrentIndex].getQuestion(); 
    mQuestionTextView.setText(question); 

question가 여기 int, 나는이 어떻게 작동하는지 궁금합니다. 더 이상하게도 question을 리터럴 int로 변경하면 1이면 앱이 작동하지 않습니다.

+0

당신이 그것을 작동합니까 어떻게 무엇을 의미합니까? 'strings.xml'의 모든 문자열은 정수 값과 연결됩니다 (resid = resource id). setText()가 정수를 취하면, 정수에 해당하는 문자열 리소스를 찾아보고 TextView를 업데이트합니다. – Philip

답변

5

The Docs 나는 이것들이 최근에 (또는 내가 마지막으로 본 이후로) 바뀌 었는지 잘 모르겠다 고 생각했다.

어쨌든 intparam으로 입력하면 resource id을 나타냅니다. 따라서 이 strings.xml에있는 경우 여기에 리터럴 String 대신 제공 할 수 있습니다.

그래서, 경우에 strings.xml 당신이

<resources> 
    <string name="hello">Hello!</string> 
</resources> 

당신이

myTV.setText(R.string.hello); 

myTV이 "안녕하세요"보여줄 것이라고 할 수있다.

id과 일치하지 않는 intR.strings에 전달하면 예외가 발생합니다.

3

xml에서 사전 정의한 StringsR.java 클래스에서 동적으로 생성 된 ID를가집니다. 예를 들어, R.string.question_africa은 정수로, 저장된 String resource을 가리 킵니다. R.java 클래스를 열고 문자열을 참조하는 정확한 정수를 볼 수 있지만 자동으로 생성 된 이후로는 아무 의미가 없습니다.

setText() 방법은 resId 리소스 ID입니다, 당신의 예에 setText(int resId)이며, 다른 변수를 호출 할 수 있습니다

더 : http://developer.android.com/reference/android/widget/TextView.html#setText(int)