2016-07-21 5 views
0

그것은 나의 첫 번째 모험입니다. 바보 같은 일은 미안해. 내 과제는 android에서 전화 번호부를 만드는 것입니다. 나는 너무 화가 나서 좌절감을 느끼고 화가났다. 어떻게해야할지 모르겠다.안드로이드 전화 번호부

그래서 처음에는 매우 간단한 앱을 만들기로 결정했습니다.

나는 mainActivity가 있다고 가정 해 보겠습니다. 거기에 EditText가 있습니다, 나는 약간의 문자열을 입력합니다. 그런 다음 버튼을 누르고 활동 2를 봅니다. mainActivity로 돌아가려면 버튼을 누르고 전에 입력 한 문자열을 나타내는 TextView를보고 싶습니다. 문제는 그 문자열 (mainActivity 전에 내 변수는 저장되지 않습니다, 내 변수를 일시 정지? 를 내가 저장할 수 있습니까?

같은 생각이 책 응용 프로그램을 문의하는 일이. 나는 새 연락처를 만들 (널 (null)입니다, 그것을 통과 의도에, MainActivity로 돌아가지만, 접점의 ArrayList를 만 새 연락처를 가지고있다. 나머지 데이터는

  • Activity2
  • mainActivity
  • ,536 (

      손실

      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에 글고에서 문자열을 저장합니다. 이를 사용하면 해당 키를 사용하여 동일한 SharedPreference를 호출하여 모든 활동에서 해당 문자열을 검색 할 수 있습니다.

    A quick example to Shared Preference

    0

    당신은 매니페스트

    <activity android:name=".MainActivity" 
          android:launchMode= "singleInstance" > 
    

    참고 문헌 활동이의 두 번째 줄을 추가 시도 할 수 있습니다 : https://stackoverflow.com/a/5784950/399741

    onSaveInstanceState가 onPause 후에 호출 즉시 이동 중지되지 않을 수 있습니다

    (이 액티비티가 파기 될 때 호출되므로 액티비티가 포커스를 잃었거나 볼 수없는 경우 메서드가 호출됩니다. Android는 일반적으로 활동이 아직 살아있을 때 인스턴스 변수를 유지하지만 일시 중지 또는 중지 만합니다.

    그러나 Android에서 새로운 활동 인스턴스를 작성하여 다시 탐색 할 때 활동 스택의 맨 위에 배치하여 문자열을 null로 만들 수 있습니다. 위의 코드를 사용하여이 문제를 방지하고 동일한 인스턴스가 파괴 될 때까지 사용되도록 할 수 있습니다.

    편집 : 강사가 활동 사이에서 정보를주고받는 것을 연습하기를 원할 수도 있습니다. Intent의 번들에서 Activity2로 문자열을 전달하고 Activity1로 돌아갈 때 다시 할 수 있습니다. 인 텐트의 묶음을 가져 와서 onCreate에서 문자열을 재설정합니다.