2016-07-21 3 views
0

ここは私の最初のクエストです。申し訳ありません。 私の割り当てはアンドロイドで電話帳を作成することです。私はとても怒っていて、欲求不満で、本当に怒っています。私はそれをどうやって行うのか分かりません。アンドロイドの電話帳

だから私は最初に非常に単純なアプリを作ることにしました。

私はmainActivityを持っているとしましょう。そこにEditTextがあります。私はいくつかの文字列を入力します。それから私はボタンを押してアクティビティ2を見ます。私はmainActivityに戻るためにボタンを押します、そして、私は前に入力された文字列を表すTextViewを見たいと思います。 問題は、その文字列がnullである(( mainActivityが私の変数を一時停止する前に、私の変数が保存されません?私はそれらを保存することができますどのように ?

同じと思う帳アプリに連絡することを起こる。私は新しい連絡先を作成し、それを渡します目的に、バックMainActivityに行くが、連絡先のArrayListには、新しい連絡先を持っている。残りのデータが失われた(

MainActivity:

public class MainActivity extends AppCompatActivity implements View.OnClickListener { 

    TextView txtsavedValue; 
    EditText edtInput; 
    Button btnTo2; 
    String string, str; 
    int integer1; 
    String LOG_TAG = MainActivity.class.getSimpleName(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
       .setAction("Action", null).show(); 
      } 
     }); 
     btnTo2 = (Button) findViewById(R.id.btnSendTo2); 
     btnTo2.setOnClickListener(this); 
     txtsavedValue = (TextView) findViewById(R.id.txtSavedValue); 
     edtInput = (EditText) findViewById(R.id.editTextInput); 
     if (savedInstanceState != null) { 
      string = savedInstanceState.getString("mykey"); 
      Log.v(LOG_TAG, string); 
      txtsavedValue.setText(string); 
     } 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, 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(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 

    @Override 
    public void onClick(View view) { 
     string = (edtInput.getText().toString()); 
     Log.v(LOG_TAG, string); 
     Intent intent = new Intent(this, Main2Activity.class); 
     startActivity(intent); 
    } 

    @Override 
    protected void onSaveInstanceState(Bundle outState) { 
     outState.putString("mykey", string); 
     super.onSaveInstanceState(outState); 


    } 

    @Override 
    protected void onRestoreInstanceState(Bundle savedInstanceState) { 
     super.onRestoreInstanceState(savedInstanceState); 

     Log.v(LOG_TAG, "truuue"); 
     string = savedInstanceState.getString("mykey"); 
     txtsavedValue.setText(string); 



    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     if (string != null) { 
      Log.v(LOG_TAG, string); 
      txtsavedValue.setText(string); 
     } else Log.v(LOG_TAG, "nulll"); 


    } 
} 

Main2Activity:あなたがボタンを押すと

public class Main2Activity extends AppCompatActivity implements View.OnClickListener { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main2); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
        .setAction("Action", null).show(); 
     } 
    }); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    Button b = (Button) findViewById(R.id.btnTo1); 
    b.setOnClickListener(this); 
} 

@Override 
public void onClick(View view) { 
    Intent intent = new Intent(this, MainActivity.class); 
    startActivity(intent); 
} 

}

+0

もっと明確にコードする必要があります。特にロギングでは、ログを有効にして、コードがどのように流れるかを識別するのに役立つ情報を提供します。 – JoxTraex

答えて

0

は、SharedPreferenceへのEditTextから文字列を保存します。これで、そのキーで同じSharedPreferenceを呼び出すことで、任意のアクティビティからその文字列を取得できます。

A quick example to Shared Preference

0

あなたは、文献

マニフェスト

<activity android:name=".MainActivity" 
      android:launchMode= "singleInstance" > 
であなたの活動にこれの2行目を追加してみてください:onSaveInstanceStateはすぐにonPauseまたはonStop後に呼び出されないことがあります https://stackoverflow.com/a/5784950/399741

(これらあなたのアクティビティがフォーカスを失ったとき、または可視でないときにメソッドが呼び出されます)、アクティビティが破棄されるときに呼び出されるためです。 Androidは通常、アクティビティがまだ生きているのに一時停止または停止したときにインスタンス変数を保持します。

しかし、Androidがアクティビティの新しいインスタンスを作成していて、それを元に戻ったときにアクティビティスタックの先頭に配置して文字列をnullにすることがあります。上記のコードでこれを防ぐことができ、破壊されるまで同じインスタンスが使用されるようにします。

編集:インストラクターは、アクティビティ間で情報をやりとりすることを練習したいと思うかもしれません。インテントのバンドルでActivity2に文字列を渡し、Activity1に戻ったときにもう一度やり直して、インテントのバンドルを取得してonCreateの文字列をリセットします。

関連する問題