2017-05-15 8 views
-3

テキストがあります。テキストがあります。以下はEditTextで、Buttonを押してTextViewフィールドを変更します。前のカードに戻ってテキストを変更したカードに戻ると、以前に変更されたテキストは保存されませんでした。 TextViewの変更されたテキストが次の編集まで永久に存在するようにしたいと思います。TextViewで文字列を設定して保存する方法は?

protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.change_url); 
    button1 = (Button) findViewById(R.id.button9); 
    button2 = (Button) findViewById(R.id.button10); 
    devices = (TextView) findViewById(R.id.textView); 
    buildings = (TextView) findViewById(R.id.textView4); 
    ed1 = (EditText) findViewById(R.id.devices); 
    ed2 = (EditText) findViewById(R.id.buildings); 

    button1.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      String niu = ed1.getText().toString(); 
      devices.setText(niu); 


     } 
    }); 

} 

は私がSharedPreferencesとonSaveInstanceState、onRestoreInstanceStateを使用して記事をたくさん見てきましたが、私はそれらを適切に使用する方法がわかりません。誰かが最初に記述した結果を得るために自分のコードを作ることができますか?私はこのように私のコードを編集し、長い時間のためにそれに座って答えた後、何の効果

を持っていないしてきた:

protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.change_url); 
    button1 = (Button) findViewById(R.id.button9); 
    button2 = (Button) findViewById(R.id.button10); 
    devices = (TextView) findViewById(R.id.textView); 
    buildings = (TextView) findViewById(R.id.textView5); 
    ed1 = (EditText) findViewById(R.id.devices); 
    ed2 = (EditText) findViewById(R.id.buildings); 

    button1.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      String niu = ed1.getText().toString(); 
      devices.setText(niu); 


     } 
    }); 

    button2.setOnClickListener(new View.OnClickListener(){ 
     @Override 
     public void onClick(View v){ 

      String niu2 = ed2.getText().toString(); 
      devices.setText(niu2); 
     } 
    }); 

} 


@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putString("TEXT", (String) devices.getText()); 
    outState.putString("TEXT2", (String) buildings.getText()); 
} 

@Override 
protected void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 
    devices.setText(savedInstanceState.getString("TEXT")); 
    buildings.setText(savedInstanceState.getString("TEXT2")); 

} 

それはなぜ働くdoesntの?

+0

あなたの体はあなたのためにコードを作成しません。あなたは参考文献から学ばなければなりません。 – androidnoobdev

+0

「前のカードに戻り、テキストを変更したカードに戻ると、「これはどういう意味ですか? 2つの活動があることを意味しますか? –

+0

はい、私は2つの活動を意味しました – Torwopik

答えて

2

あなたの場合は、共有環境設定を使用するか、グローバル変数に値を格納する必要があります。あなたはandroid activity life cycleの適切なグリップを持っていることを確認してください。

使用SharedPreferences:

public void saveStringInSharedPreferences(String text) { 
    // Retrieve the default shared preferences instance available to full application 
    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); 
    sharedPreferences.edit().putString("KEY", "VALUE").commit(); 
} 

保存された値の取得:

sharedPreferences.getString("KEY", "DEFAULT_VALUE"); 

をonSaveInstanceState使用:

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putString("TEXT", (String) textView.getText()); 
} 

@Override 
protected void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 
    textView.setText(savedInstanceState.getString("TEXT")); 
} 

しかし、前に(これは、あなたが上記の要件のために使用しなければならないものではありません) onSaveInstanceStateを使用してこれを読み取るdocumentation

+0

'onSaveInstanceState'は、何らかの理由でアクティビティが強制的にオペレーティングシステムによって強制終了された場合にのみ呼び出され、押されたとき、またはアクティビティがOSによって強制的に強制終了されないときに呼び出されません。 –

関連する問題