Как обновить содержимое вкладки фрагмента нажатием кнопки

Я действительно новичок в 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();
}

Попробуйте это, все, что присутствует в закладке, будет выполнено снова.