我是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();
}
});
提前感谢您的帮助!
答案 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下的所有内容都会再次执行。