2016-05-11 21 views
1

私はユーザー入力(String)を取得したい簡単なアンドロイドアプリを持っています。だから私は "EditText"ボックスと "Enter"ボタンがあります。ユーザーが何かを入力してEnterキーを押すと、そのテキストを表示しようとしていますが、setOnClickListener()関数内のすべてのことを行う限り動作します。文字列変数は関数外ではnullになります。ここに私のコードは次のとおりです。文字列変数がsetOnClickListener()関数の外部でnullになる

public class MainActivity extends AppCompatActivity { 

Button hitButton; 
EditText userInput; 
String myVariable; 

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

    hitButton = (Button)findViewById(R.id.button); 
    hitButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      userInput = (EditText)findViewById(R.id.userInput); 
      myVariable= userInput.getText().toString(); 

     } 
    }); 

    TextView textView = (TextView)findViewById(R.id.textView); 
    textView.setText(myVariable); // THIS IS THE PROBLEM 
    // IT DISPLAYS NULL WHICH MEANS THAT String myVariable = null 
    } 
    } 

私はsetOnClickListener関数内TextView.setText(myVariable変数)を入れた場合、それは完璧に動作しますが、関数の外、myVariable変数がnullになります。そして、私は関数の外でその変数を使用する必要があります。事前に

感謝:)

+0

役立つことを願っていますように、あなたはのonClickメソッド、このために使用SharedPreferences外にそれをしたい場合正常。 – NSimon

+0

onClickは、ボタンをクリックしたときにだけトリガーするメソッドです。あなたのtextViewが値を更新する必要がある場合。これは外側よりもonClick内にある必要があります – Stallion

+0

これはnullになるのではなく、実際にボタンをクリックして入力をmyVariableに設定する前にTextViewの値を設定していることです。'textView.setText(myVariable);を移動します。 'onClickListenerの中の部分 – zgc7009

答えて

1

public class MainActivity extends AppCompatActivity { 

Button hitButton; 
EditText userInput; 
String myVariable; 
public static final String MyPREFERENCES = "MyPrefs" ; 
public static final String KEY = "Key"; 
SharedPreferences sharedpreferences; 

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

    hitButton = (Button)findViewById(R.id.button); 

    sharedpreferences = getActivity().getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);   

    hitButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      userInput = (EditText)findViewById(R.id.userInput); 
      myVariable= userInput.getText().toString(); 

      SharedPreferences.Editor editor = sharedpreferences.edit(); 
      editor.putString(KEY, myVariable); 
      editor.commit(); 
     } 
    }); 

    TextView textView = (TextView)findViewById(R.id.textView); 
    textView.setText(sharedpreferences.getString(KEY, null)); // THIS IS THE PROBLEM 
    // IT DISPLAYS NULL WHICH MEANS THAT String myVariable = null 
    } 
    } 

が、それは `` onClickListener`が呼び出された後myVariable`のみが初期化されるので、これはあなた

0

onClickボタンをクリックしたときにのみトリガする方法です。

ボタンをクリックしてtextViewの値を更新する必要がある場合は、このように外側にonClickの範囲内にする必要があります。

public void onClick(View view) { 
      userInput = (EditText)findViewById(R.id.userInput); 
      myVariable= userInput.getText().toString(); 
      textView.setText(myVariable);  
     } 
0

あなたがそれを置くようスタリオンの答え、

textView.setText(myVariable); 

を完了するために、それはonCreate方法に位置しているように、現在myVariableはまだある理由である(、あなたの活動の作成時に実行されるnull )しかし、後には決して再びない。

1

メソッドonCreateは、アクティビティの起動時に1回呼び出されます。あなたがやるようなあなたのTextViewを初期化したい場所だから、これは次のとおりです。

TextView textView = (TextView)findViewById(R.id.textView); 

しかし、ユーザーがボタンをクリックすると、変数myVariable変数の値を設定し、あなたのTextViewのテキストを設定するために、あなたが呼び出す必要がありますonClickメソッド内のTextViewのsetTextメソッド。

public void onClick(View view) { 
      userInput = (EditText)findViewById(R.id.userInput); 
      myVariable= userInput.getText().toString(); 
      textView.setText(myVariable);  
     } 

ユーザがクリックすると、変数myVariableが設定され、上に宣言しているので、関数の外でも使用できます。

希望に役立ちます!

0

これは、文字列myVariable = nullです。ヌル変数を使用してsettextを実行しようとすると、onClickがトリガされたときにのみ更新されるためです。 これを行うには、これを行う必要があります: ボタンをインスタンス化した直後にEditTextのuserIputをonclickメソッドの外に宣言してインスタンス化し、myVariableに宣言でデフォルト値を与えます。

関連する問題