2016-04-01 5 views
0

Я столкнулся с проблемой передачи данных в onpause() метода активности. Когда пользователь нажимает кнопку в одном действии, второй запуск активности. В методе onPasue 1-го действия я хочу передать некоторые данные другой активности .и использовать intent.putExtra() для сохранения данных в OnPause(). 2-ой деятельности я использую bundle.getString(), чтобы получить data.below мой кодПередача данных между действиями в onPause

public class FirstActivity extends Activity { 

Intent intent; 
Button b; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_tola_calculation); 
    b = (Button) findViewById(R.id.button); 
    intent = new Intent(Tola_calculation.this, Kaat_calculation.class); 
    b.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      startActivity(intent); 

     } 
    }); 
} 

@Override 
public void onPause() { 
    super.onPause(); 
    intent.putExtra("key", "i am value"); 
}} 

и

public class secondActivity extends Activity { 
int value; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_kaat_calculation); 
    Bundle extras=new Bundle(); 
    Intent intent=getIntent(); 
    extras=intent.getExtras(); 
    if (extras!=null) { 
     String value = extras.getString("key"); 
     Toast.makeText(Kaat_calculation.this,value,Toast.LENGTH_SHORT).show(); 
    } 
    else 
    { 
     Toast.makeText(Kaat_calculation.this,"null problem",Toast.LENGTH_SHORT).show(); 
    } 


}} 

проблема находится во 2-й активности intent.getExtras() возвращает null first time.i нажмите кнопку возврата 1-я активность resu mes.then я снова нажимаю, чтобы перейти к второму действию. В этот момент данные извлекаются, и int.getextras() не возвращает null.can кто-то объясняет это странное поведение. Или я делаю что-то странное, поскольку я новичок в android programming.i надеюсь, что я в состоянии четко объяснить проблему

ответ

0

Это происходит потому, что ваш второй Activity создан перед 1-ые Activity звонки onPause().

Решение: добавьте дополнительную информацию в обратный вызов onClick(). Другими словами (как указывают другие ответы) вам необходимо прикрепить данные к Intent перед вызовом startActivity() с этим Intent.

В 1-й Activity «ы onPause() метод я хочу передать некоторые данные другие Activity

Там нет абсолютно никакой необходимости делать это, потому что ваш первый Activity гарантированно назвать onPause() как только ваш 2 Activity будет видно. Итак, вы уже знаете в этот момент, что ваш 1-й Activity вызвал onPause().

Проконсультируйтесь с official docs о жизненном цикле деятельности для получения более подробной информации.

+0

спасибо за каждого, с reply.putting его внутри OnClick уже worked.but мне нужно для передачи данных, когда активность собирается приостановить состояние из-за этого нажатие кнопки или какая-либо другая причина. Мне было интересно, какая причина этого поведения. Я получил ответ спасибо –

0

Перед тем, как начать новую деятельность, вы должны добавить данные в намерение. Так эта строка

intent.putExtra("key", "i am value"); 

Если прежде чем

startActivity(intent); 

В общем, правильный код

public class FirstActivity extends Activity { 

Intent intent; 
Button b; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_tola_calculation); 
    b = (Button) findViewById(R.id.button); 
    intent = new Intent(Tola_calculation.this, Kaat_calculation.class); 
    b.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      intent.putExtra("key", "i am value"); 
      startActivity(intent); 

     } 
    }); 
} 

@Override 
public void onPause() { 
    super.onPause(); 
} 
} 
0

Это не работает в первый раз, потому что когда вы вызываете startActivity дополнительный является еще не установлен. Действие №2 начинается до того, как вызывается .

Он работает во второй раз, потому что вы сделали Намерение переменной экземпляром переменной и вы не вызывая finish() после startActivity() вызова. Это заставляет ваш первый экземпляр активности оставаться в живых. Во второй раз, когда вы запускаете операцию №2, экземпляр намерения уже существует, и в нем уже есть дополнительный.

Вы должны поставить дополнительное право перед вызовом startActivity(), и все будет хорошо.

Существует большой 7 шаг объяснение того, как это все работает на Android Docs page

0

метод OnPause не означает, что ваша активность заканчивает, только то, что он во время паузы. Если пользователь нажимает кнопку «назад», например, он приостанавливает, но не выполняет операцию. лучше обратитесь к документации на стадиях жизненного цикла активности

, а также увидеть этот http://developer.android.com/reference/android/app/Activity.html#finish%28%29

Смежные вопросы