如何在按钮单击时刷新片段选项卡内容

时间:2012-11-29 13:31:46

标签: android eclipse tabs android-fragments refresh

我是Android的新手,我正在实施一个小项目,我从一个Drupal网站获得新闻。此应用程序有3个选项卡,每个选项卡都有一个包含特定内容的文章列表。文章列表由在linearlayout中排列的textviews和imageview创建。当我点击标题时,文章正在打开详细信息。这些文章是通过HTTP POST和ViewJSON模块从Drupal站点加载的。使用FragmentActivity和TabHost创建选项卡。一切都很好,直到这里工作正常。

我的问题是我想制作一个刷新按钮,放在标签上,当我按下它时,文章列表必须刷新或重新加载并保持当前标签打开。 我试图替换标签片段内容并重新打开它,但是当我点击一篇文章的标题打开它时,标签内容仍保留在所有片段下的堆栈中。我提到当我点击文章标题时,会打开一个新片段。我发了一篇文章的id作为论据,在同一篇文章中我打开了文章的内容。

我正在尝试使用此代码,但没有成功。

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(); 
                    }
                });

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:6)

要刷新片段的内容,您可以保留对片段的引用,并在该片段中调用公共(例如)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方法的刷新按钮中使用。

这样,您在刷新时不会替换/创建任何新片段。因此,在参加de article details活动之后回到tabActivity,可能会正常工作。

答案 1 :(得分:-1)

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();
}

试试这个,tab下的所有内容都会再次执行。