2016-12-11 2 views
1

私は始めたアクティビティを持っています。それは私のstrings.xmlからの文字列を格納したい配列を持っています。さらに、ボタンをクリックすると、TextViewのテキストが配列の次の要素に変更されました。ですから、ボタンをクリックするたびにTextViewにテキストを変更したいのです。テキストは配列から来ます。しかし、私はコードでのstrings.xmlから文字列を取得するための配列を取得することはできません。XMLからJavaの文字列をJava配列に直接挿入する方法

getString(R.string.word_1) 

私のstrings.xmlは次のようになります。

<resources> 
<string name="app_name">Name</string> 
<string name="word_1">First</string> 
</resources> 

このArrayは、次のコードを持っている活動:私は、例えば、「第一」とのgetString(R.string.word_1)を置き換えるが、私はXMLファイルから単語を呼び出し、ハードそれらすべてをコーディングしないようにしたいとき

public class DisplayMenuActivity extends AppCompatActivity { 

Button nextButton; 
TextView word; 

public String list[] = {getString(R.string.word_1)}; 
private int listNumber = 0; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_display_menu); 



    //Word 
    word = (TextView) findViewById(R.id.word); 
    word.setText(list[0]); 

    //Button 
    nextButton = (Button) findViewById(R.id.nextButton); 
    nextButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      listNumber++; 
      if (listNumber >= list.length) { 
       listNumber = 0; 
      } 
      word.setText(list[listNumber]); 
     } 
    }); 
}} 

それは作業を行います。だから、問題は、XMLからStringを呼び出すことであり、私は解決のためにインターネット上をすべて見てきましたが、それらはすべて機能しません。誰でも私が間違っていることを考えている?誰が探しているのか調べてくれてありがとう。それは有り難いです。

答えて

0

あなたはただ行うことができます:TextView.setText()は限りそれは、文字列リソースのパラメータとしてint型を取ることができますので、

public class DisplayMenuActivity extends AppCompatActivity { 

Button nextButton; 
TextView word; 

public int[] list = {R.string.word_1}; 
private int listNumber = 0; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_display_menu); 



    //Word 
    word = (TextView) findViewById(R.id.word); 
    word.setText(list[0]); 

    //Button 
    nextButton = (Button) findViewById(R.id.nextButton); 
    nextButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      listNumber++; 
      if (listNumber >= list.length) { 
       listNumber = 0; 
      } 
      word.setText(list[listNumber]); 
     } 
    }); 
}} 

は、これが動作します。

+0

おかげで多くのことを

<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="planets_array"> <item>Mercury</item> <item>Venus</item> <item>Earth</item> <item>Mars</item> </string-array> </resources> 

このアプリケーションコードは、文字列の配列を取得します。このコードは機能しましたが、私の前のコードがうまくいかなかった理由は何ですか?まだgetString(R.string.word_1)が機能しなかった理由を理解できません。私はエディタでエラーを生成しませんでしたが、私の携帯電話でアプリをクラッシュさせました。 –

+0

クラスの初期化(つまりインスタンス作成時)でメソッド 'getString()'を呼び出すため、コードがクラッシュします。 Androdiシステムがアクティビティを作成することを決定すると、リソースを取得するためのコンテキストが不足する可能性があります。アクティビティでは、フィールドの初期化やコンストラクタに決してコードを書くべきではありません。これは 'onCreate()'メソッドの中で行うべきです。 – pdegand59

関連する問題