我有三个标签页面浏览器和操作栏栏。当我尝试切换回已经选中的选项卡时,不会显示任何数据,但是logcat表示数据已从服务器中提取并添加到arraylist中。
有关为什么数据现在不会显示的任何建议?我做了大量的研究,仍然无法理解正在发生的事情。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_tabs);
viewPager = (ViewPager) findViewById(R.id.pager);
Log.v("Main-onCreate-viewPager", viewPager.toString());
actionBar = getSupportActionBar();
mAdapter = new TabsPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(mAdapter);
actionBar.setHomeButtonEnabled(false);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
// Adding Tabs
for (String tab_name : tabs) {
actionBar.addTab(actionBar.newTab().setText(tab_name).setTabListener(this));
Log.v("Main", "tab added");
}
/**
* on swiping the viewpager make respective tab selected
**/
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
Log.v("onPageScrolled-position", Integer.toString(position));
Log.v("onPageScrolled-position", Float.toString(positionOffset));
Log.v("onPageScrolled-position", Integer.toString(positionOffsetPixels));
}
public void onPageSelected(int position) {
// on changing the page
// make respected tab selected
Log.v("onPageSelected", "onPageSelected");
actionBar.setSelectedNavigationItem(position);
Log.v("onPageSelected-position", Integer.toString(position));
}
public void onPageScrollStateChanged(int state) {
Log.v("StateChanged", "OnPageScrollStateChanged");
Log.v("statechanged-state", Integer.toString(state));
}
});
}
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {
Log.v("Main", "Tab REselected");
Log.v("onTabReselected", tab.toString());
Log.v("onTabReselected", ft.toString());
if(tab.getPosition() == 0){
Log.v("onTabReselected", "ImagesFragment");
Fragment frag;
FragmentManager fm1 = Main.this.getSupportFragmentManager();
FragmentTransaction ft1 = fm1.beginTransaction();
frag = new ImagesFragment();
//frag = new FeaturesFragment();
ft1.replace(R.id.pager, frag);
ft1.commit();
frag.setUserVisibleHint(true);
}
if (tab.getPosition() == 1) {
Log.v("onTabReselected", "FeaturesFragment");
Fragment frag;
FragmentManager fm1 = Main.this.getSupportFragmentManager();
FragmentTransaction ft1 = fm1.beginTransaction();
frag = new FeaturesFragment();
ft1.replace(R.id.pager, frag);
ft1.commit();
frag.setUserVisibleHint(true);
}
if (tab.getPosition() == 2) {
Log.v("onTabReselected", "OptionsFragment");
Fragment frag;
FragmentManager fm1 = Main.this.getSupportFragmentManager();
FragmentTransaction ft1 = fm1.beginTransaction();
frag = new OptionsFragment();
ft1.replace(R.id.pager, frag);
ft1.commit();
frag.setUserVisibleHint(true);
}
}
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
// on tab selected
// show respected fragment view
Log.v("onTabSelected", tab.toString());
Log.v("onTabSelected", ft.toString());
Log.v("tab position1", Integer.toString(tab.getPosition()));
viewPager.setOffscreenPageLimit(0);
//viewPager.setCurrentItem(tab.getPosition()); //null pointer exception here
tab.select(); //no null pointer exception, but no show data when swiping tabs
Log.v("onTabSelected", tab.toString());
Log.v("tab position", Integer.toString(tab.getPosition()));
if (tab.getPosition() == 0) {
Fragment frag;
FragmentManager fm1 = Main.this.getSupportFragmentManager();
FragmentTransaction ft1 = fm1.beginTransaction();
frag = new ImagesFragment();
ft1.replace(R.id.pager, frag);
ft1.commit();
frag.setUserVisibleHint(true);
}
if (tab.getPosition() == 1) {
Fragment frag;
FragmentManager fm1 = Main.this.getSupportFragmentManager();
FragmentTransaction ft1 = fm1.beginTransaction();
frag = new FeaturesFragment();
ft1.replace(R.id.pager, frag);
ft1.commit();
frag.setUserVisibleHint(true);
}
if (tab.getPosition() == 2) {
Fragment frag;
FragmentManager fm1 = Main.this.getSupportFragmentManager();
FragmentTransaction ft1 = fm1.beginTransaction();
frag = new OptionsFragment();
ft1.replace(R.id.pager, frag);
ft1.commit();
frag.setUserVisibleHint(true);
}
}
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {
Log.v("Main", "Tab UNselected");
Log.v("onTabUnselected", tab.toString());
Log.v("onTabUnselected", ft.toString());
}
public class TabsPagerAdapter extends FragmentStatePagerAdapter {
public TabsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int index) {
Log.v("index", Integer.toString(index));
switch (index) {
case 0:
Log.v("TabsPagerAdapter", "case 0: ImagesFragment");
return new ImagesFragment();
case 1:
Log.v("TabsPagerAdapter", "case 1: FeaturesFragment");
return new FeaturesFragment();
case 2:
Log.v("TabsPagerAdapter", "case 2: OptionsFragment");
return new OptionsFragment();
}
return null;
}
@Override
public int getCount() {
// get item count - equal to number of tabs
return 3;
}
}
答案 0 :(得分:0)
使用FragmentStatePagerAdapter代替TabsPagerAdapter。
答案 1 :(得分:0)
这可能对你有帮助我也有这个问题我有4个标签并切换它们重新创建视图,设置适配器后使用此代码,
viewPager.setAdapter(mAdapter);
viewPager.setOffscreenPageLimit(5); //this one.!
你可以拥有任何数量的限制,但是由于内存自定义,最好使用较少的数字,在oncreate()方法中使用它(如果是Activity)。