【发布时间】:2015-10-16 17:21:30
【问题描述】:
我有三个带有页面查看器和操作栏的标签。当我尝试切换回已选择的选项卡时,未显示任何数据,但 logcat 表明数据已从服务器拉出并添加到数组列表中。
关于为什么数据现在不会显示的任何建议?我进行了广泛的研究,但仍然无法理解发生了什么。
@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;
}
}
【问题讨论】:
-
你试过我的解决方案了吗?
标签: android android-fragments android-tabs