Флаги намерений AndroidAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Флаги намерений Android

Сообщение Anonymous »

Моя проблема заключается в понимании того, как правильно использовать намерения. Погуглив и прочитав всю документацию и статьи по этой теме, я до сих пор не могу разобраться в своей проблеме. У меня есть два действия: «Поиск» и «ActivityWordInfo». Действие «Поиск» выполняет поиск слова в базе данных и отображает результаты поиска или предложения. После того, как пользователь щелкает один из результатов поиска, запускается действие «ActivityWordInfo», в котором отображается определение слова. Вот часть кода:

Доступно для поиска:

Код: Выделить всё

     @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.search);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

// Get the intent, verify the action and get the query
if( savedInstanceState != null ){
//the application is being reloaded
query = savedInstanceState.getString("searchedWord");
doMySearch(query);  //does the search in the database
}else{
Intent intent = getIntent();
if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
query = intent.getStringExtra(SearchManager.QUERY);
doMySearch(query);
}
}
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState){
super.onSaveInstanceState(savedInstanceState);
savedInstanceState.putString("searchedWord", query);
//saves the searched word if this activity is killed
}
@Override
public void onClick(View v) {    //when one of the search results is clicked
int wordID = (Integer) v.getTag();
Intent intent = new Intent(Searchable.this, ActivityWordInfo.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
Bundle b = new Bundle();
b.putInt("key", wordID);
b.putInt("calling_activity", callingActivityId);
intent.putExtras(b);
startActivity(intent);
}
ActivityWordInfo:

Код: Выделить всё

 public void onCreate(Bundle savedInstanceState) {
...
Bundle b = getIntent().getExtras();
current_word_id = b.getInt("key", 0);
callingActivityId = b.getInt("calling_activity", 0);
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
switch(callingActivityId){
case 3:   //which is the ID of Searchable activity
Intent intent3 = new Intent(ActivityWordInfo.this, Searchable.class);
intent3.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent3);
break;
}
break;
}
Когда пользователь находится в ActivityWordInfo и перемещается вверх, я ожидаю, что перейду к действию с возможностью поиска, которое должно было сохранить состояние своего экземпляра (список результатов должен все еще быть там). Что происходит на самом деле:
-Слово, введенное пользователем, присваивается переменной «запрос», а затем результаты и предложения отображаются в «Searchable».
-пользователь щелкает одно из слов, и создается «ActivityWordInfo».
-затем, когда пользователь перемещается вверх, вызывается onSaveInstanceState для действия «Searchable», затем оно уничтожается и создается. В результате получается пустой макет :(

Я не могу понять, почему «Searchable» уничтожается, а затем создается! Это происходит только в Android 4.2, а не в более низких API (в 2.3.3 все работало идеально, как я ожидал). Есть ли разница в жизненном цикле активности в JellyBean?

Примечание: я не могу использовать атрибут родительской активности в манифесте, поскольку ActivityWordInfo вызывается несколькими родители.

Подробнее здесь: https://stackoverflow.com/questions/178 ... tent-flags
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»