2012-01-19 8 views
3

Это мой первый пост, поэтому, пожалуйста, будь приятным :) У меня вопрос, и никто не ответил на сообщение, которое я видел.Обновить активность и снова открыть

У моего приложения есть список и кнопка для открытия действия, это действие создает новый элемент, который будет отображаться в списке предыдущего действия при нажатии кнопки «Создать».

Как я могу это сделать?

Это код, который я сделал для первой кнопки:

intent = new Intent(this.getBaseContext(), NewTestActivity.class); 
this.finish(); 
startActivity(intent); 

и это код, чтобы вернуться в обновление:

Intent intent = new Intent(getBaseContext(), TestListActivity.class);      
startActivity(intent); 

Но код GoBack полезно, потому что активность не обновляется. Я должен назвать новую деятельность по-другому? Или вернуться к предыдущей деятельности по-разному? Или вернуться нормально и обновить активность, когда я вернусь в деятельность previum?

Хорошо ... это все. Извините за мой плохой английский и, если на этот вопрос был дан ответ в другой теме, дайте мне ссылку на чтение, потому что я не могу найти его :)

PS: Я начал с Android в декабре.

Благодарим за помощь.

+0

У вас есть код в методе onResume()? Обычно onResume будет вызываться для последующих операций. – kosa

+0

нет, действие для загрузки списка находится в методе onCreate(). – AuTi

+0

Попробуйте добавить то же самое в onResume() и также посмотреть. – kosa

ответ

1
  1. Когда вы собираетесь начать новую деятельность, вы не должны закрывать текущий, пока вам не понадобится это поведение. (удалите this.finish(); строку с вашего кода)
  2. Также вы не должны закрывать активное действие вручную, пока оно вам не понадобится. Когда пользователь нажимает кнопку «назад» на устройстве, Android выводит предыдущее действие из «заднего стека». Прочтите еще раз Activity документации.
  3. В соответствии с вашим описанием у вас есть список элементов. Поэтому, чтобы обновить список, вам необходимо обновить свой набор данных и уведомить список об этом по вызову метода ListView.notifyDataSetChanged().
1

Прежде чем перейти к реальному ответу, я хотел бы показать некоторые улучшения в вашем коде. Во-первых, при создании Intent (или когда требуется контекст в целом) от деятельности нет необходимости вызывать getBaseContext(), вы можете просто использовать this:

intent = new Intent(this, NewTestActivity.class); 

Во-вторых, андроид хорошо погрузочно-разгрузочных работах, вам не нужно закрывать свое первое действие вручную с помощью finish(). Android автоматически приостанавливает или останавливает ваше первое действие и возвращает его, когда вы вернетесь к нему.

В-третьих, в вашем случае вы можете использовать startActivityForResult() вместо startActivity() по причинам, которые я объясню ниже.
Это сделает ваш код выглядеть следующим образом:

private static final int MY_REQUEST_CODE = 33487689; //put this at the top of your Activity-class, with any unique value. 
intent = new Intent(this, NewTestActivity.class); 
startActivityForResult(intent, MY_REQUEST_CODE); 

Теперь startActivityForResult() начинает деятельность и ждет результата от этой новой деятельности.При вызове finsih() в новой деятельности вы будете в конечном итоге в первом Activitys onActivityResult() -метода, с данными, поставляемых из нового Activty, что в настоящее время закрыты:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if(requestCode != MY_REQUEST_CODE) return; //We got a result from another request, so for this example we can return. 
    if(resultCode != RESULT_OK) return; //The user aborted the action, so we won't get any data. 
    //After the above if-statements we know that the activity that gives us a result was requested with the correct request code, and it's action was successful, we can begin extracting the data, which is in the data-intent: 
    Item item = (Item) data.getSerializableExtra("customData"); //casts the data object to the custom Item-class. This can be any class, as long as it is serializable. There are many other kinds of data that can be put into an intent, but for this example a serializable was used. 
    itemList.add(item); //This is the list that was specified in onCreate() 
    //If you use an Adapter, this is the place to call notifyDataSetChanged(); 
} 

Для этого все, чтобы работать, мы должны сделать некоторые вещи во второй активность: Когда элемент был создан, мы должны установить результат:

//We begin by packing our item in an Intent (the Item class is an example that is expected to implement Serializable) 
Item theCreatedItem; //This is what was created in the activity 
Intent data = new Intent(); 
data.putSerializable(theCreatedItem); 
setResult(RESULT_OK, data); 
finish(); 

Это должно вернуться к первому Activitys onActivityResult() -метода с пунктом, как описано выше.

+0

waw ... действительно явный ... но, я думаю, что есть лучший способ сделать то, что я хочу. Только нужно обновлять активность каждый раз, когда я показываю ... ничего странного. На самом деле спасибо Джейву ... Удивительный учитель! – AuTi

+0

Очень хорошо, удачи в вашем проекте :) – Jave

+0

Ну ... как я говорю, решение было очень легким, я хочу только изменить оператор, открытый для публики, в функции другого класса. Тогда используйте функцию списка обновлений, я хочу :) очень спасибо за помощь! – AuTi

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