10

我是 Android 新手,我正在实施一个小项目,其中我有来自一个 Drupal 网站的新闻。这个应用程序有 3 个标签,每个标签都有一个包含特定内容的文章列表。文章列表由以线性布局排列的 textviews 和 imageviews 创建。当我点击标题时,文章正在以详细信息打开。这些文章是从 Drupal 站点通过tHTTP POSTViewJSON模块加载的。选项卡是用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(); 
  }
});

提前感谢您的帮助!

4

2 回答 2

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 方法中可用。

这样,您在刷新时不会替换/创建任何新片段。因此,在进入文章详细信息活动后返回 tabActivity 可能也可以正常工作。

于 2012-11-29T14:00:41.443 回答
-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();
}

试试这个,选项卡下的所有内容都将再次执行。

于 2017-03-05T21:21:57.227 回答