如何刷新 FragmentPagerAdapter 的片段? [英] How to refresh a Fragment of a FragmentPagerAdapter?
问题描述
我使用 TabPageIndicator
和 FragmentPagerAdapter
库获得了 2 个名为 tab1(主页)和 tab2(配置文件)的标签.
I have got 2 tabs called tab1 (home) and tab2 (profile) using TabPageIndicator
and FragmentPagerAdapter
libraries.
在 tab2 中,我有一个名为登录"的按钮(tab2 膨胀 abc.xml
).
In tab2, I have a button named "Log in" (tab2 inflates abc.xml
).
当用户点击登录"按钮时,应用将在新活动中显示一个登录表单.登录后,活动结束,tab2 的内容视图将发生变化(它显示用户的个人资料,因为它会膨胀 xyz.xml
).我该怎么做?
When users click "log in" button, the app will show a login form in a new activity.
After logging in, the activity finishes and the content view of tab2 will change ( it shows user's profile because it will inflate xyz.xml
). How can I do that?
public class MainActivity extends SherlockFragmentActivity {
private static String[] TAB_NAMES = null;
private Context context = this;
private static FragmentPagerAdapter adapter ;
@Override
protected void onCreate(Bundle savedInstanceState) {
if (TAB_NAMES == null) {
TAB_NAMES = new String[] {
getResources().getString(R.string.tab_home),
getResources().getString(R.string.tab_profile) };
}
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
adapter = new TabsAdapter(
getSupportFragmentManager());
ViewPager pager = (ViewPager) findViewById(R.id.pager);
pager.setAdapter(adapter);
TabPageIndicator indicator = (TabPageIndicator) findViewById(R.id.indicator);
indicator.setViewPager(pager);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater infalter = getSupportMenuInflater();
infalter.inflate(R.menu.main_menu, menu);
return true;
}
class TabsAdapter extends FragmentPagerAdapter {
public TabsAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return HomeFragment.getInstance();
case 1:
return new ProfileFragment();
default:
return HomeFragment.getInstance();
}
}
}
推荐答案
你可以使用 FragmentStatePagerAdapter 而不是 FragmentPagerAdapter
You can use FragmentStatePagerAdapter instead of FragmentPagerAdapter
你可以这样试试:
private static FragmentStatePagerAdapter adapter ;
private static String[] TAB_NAMES = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
if (TAB_NAMES == null) {
TAB_NAMES = new String[] {
getResources().getString(R.string.tab_home),
getResources().getString(R.string.tab_profile) };
}
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
adapter = new FragmentStatePagerAdapter(getSupportFragmentManager()) {
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return HomeFragment.getInstance();
case 1:
return new ProfileFragment();
default:
return HomeFragment.getInstance();
}
}
@Override
public int getCount() {
return TAB_NAMES.length;
}
@Override
public int getItemPosition(Object fragItem) {
int position = 0;
if (fragItem instanceof HomeFragment) {
position = 0;
} else if (fragItem instanceof ProfileFragment) {
position = 1;
}
return (position >= 0) ? position : POSITION_NONE;
}
}
ViewPager pager = (ViewPager) findViewById(R.id.pager);
pager.setAdapter(adapter);
TabPageIndicator indicator = (TabPageIndicator) findViewById(R.id.indicator);
indicator.setViewPager(pager);
}
参考
您可以查看这个解决方案.
这篇关于如何刷新 FragmentPagerAdapter 的片段?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!