Как обновить содержимое вкладки фрагмента нажатием кнопки
Я действительно новичок в Android, и я реализую небольшой проект, в котором у меня есть новости с одного сайта Drupal. Это приложение имеет 3 вкладки, и на каждой вкладке есть список статей с определенным контентом. Список статей создается текстовыми изображениями и изображениями, расположенными в linearlayout. Когда я нажимаю на заголовок, статья открывается с подробностями. Эти статьи загружаются с сайта Drupal через HTTP POST и ViewJSON. Вкладки создаются с помощью FragmentActivity и TabHost. Все нормально и отлично работает до сих пор.
Моя проблема в том, что я хочу сделать одну кнопку обновления, чтобы ее можно было поместить над вкладками, и когда я ее нажимаю, список статей должен обновляться или перезагружаться и сохранять текущую вкладку открытой.
Я попытался заменить содержимое фрагмента табуляции и повторно открыть его, но когда я нажимаю на заголовок одной статьи, чтобы открыть его, содержимое вкладки остается в стеке под всеми фрагментами. Я упоминаю, что когда я нажимаю на заголовок статьи, открывается один новый фрагмент. Я отправил идентификатор статей в качестве аргумента, и в том же фрагменте я открываю содержимое статьи.
Я пытался с этим кодом, но не добился успеха.
Button btn_refresh = (Button) findViewById(R.id.btn_refresh);
btn_refresh.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
String current_tab = mTabHost.getCurrentTabTag();
if(current_tab.contains("POPULARE")){
Fragment f;
f = new PopulareActivity();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.tot,f);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.commit();
}
if(current_tab.contains("RECOMANDATE")){
Fragment f;
f = new RecomandateActivity();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.tot,f);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.commit();
}
Точнее, я вхожу в приложение, нажмите Tab2 (покажите список статей из tab2), нажмите кнопку обновления, откройте одну статью, нажмите кнопку возврата на мобильном устройстве и покажите мне содержимое tab2. Теперь я вхожу на tab1 (и показываю список статей из tab1), откройте одну статью из списка tab1, покажите мне, что мне нужно, и нажмите кнопку "Назад" с мобильного. В этот момент показано содержимое tab2 (список статей формирует tab2, откуда я нажал кнопку обновления.).
Чтобы открыть детали статьи, я использую:
tv.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Fragment f;
f = new DetaliiActivity();
Bundle data = new Bundle();
data.putInt("id", nid);
f.setArguments(data);
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.tot,f);
ft.addToBackStack(null);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.commit();
}
});
Заранее благодарим за помощь!
Ответы
Ответ 1
Чтобы обновить содержимое фрагмента, вы можете сохранить ссылку на фрагмент и вызвать общедоступный (например) refresh()
метод в этом фрагменте. Пример:
public class ArticleTabFragmentActivity extends FragmentActivity{
private PopulareFragment populareFragment;
private RecomandateFragment recomandateFragment;
<code>
private void bindView(){
Button btn_refresh = (Button) findViewById(R.id.btn_refresh);
btn_refresh.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
String current_tab = mTabHost.getCurrentTabTag();
if(current_tab.contains("POPULARE")){
populareFragment.refresh();
} else if(current_tab.contains("RECOMANDATE")){
recomandateFragment.refresh();
}
});
}
}
public class PopulareFragment extends Fragment{
public void refresh(){
<refresh the contents of the fragment>
}
}
<Same for other fragment>
Теперь, когда вы создаете фрагмент вкладки, например PupulareFragment, используйте экземпляр экземпляра pupulareFragment для хранения фрагмента. Таким образом, он доступен в методе onClick для обновления.
Таким образом, вы не заменяете/не создаете какие-либо новые фрагменты при обновлении. Поэтому, возвращаясь к tabActivity после перехода к статье о деталях, вероятно, будет работать нормально также.
Ответ 2
FragmentTabHost tabHost3 = (FragmentTabHost) findViewById(android.R.id.tabhost);
String current_tab = tabHost3.getCurrentTabTag();
if (current_tab.equals("abc")) {
ClassFragment ni = (ClassFragment) getSupportFragmentManager().findFragmentByTag("abc");
ni.refresh();
}
Попробуйте это, все, что присутствует в закладке, будет выполнено снова.