I have an android application using swipe tabs to navigate between fragments. I have 2 fragments defined in xml file and 1 main activity. Whenever I run my application I'm getting the tabs to show up properly with the correct names "Administration", "Scan", "About"... but the page is blank. When I step through my debugger to check the return value of onCreateView (in my FragmentPagerAdapter code below) it appears to be returning correct value... I can't figure out why I keep getting a blank screen. Can someone please help?
Here is my
<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.atd.giftmonster.MainActivity" />
Here is my
public class MainActivity extends ActionBarActivity implements ActionBar.TabListener {
ViewPager mViewPager;
DFragmentManager mFragmentManager;
private static EditText textEmail;
private static EditText textPw;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
List<String> titles = new ArrayList<String>();
titles.add("administrator");
titles.add("scan");
titles.add("about");
List<Integer> layoutids = new ArrayList<Integer>();
layoutids.add(R.layout.fragment_admin);
layoutids.add(R.layout.fragment_scan);
layoutids.add(R.layout.fragment_scan);
// Set up the action bar.
final ActionBar actionBar = getSupportActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
mFragmentManager = new DFragmentManager(getSupportFragmentManager(), layoutids, titles);
// Set up the ViewPager with the sections adapter.
mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter(mFragmentManager);
// When swiping between different sections, select the corresponding
// tab. We can also use ActionBar.Tab#select() to do this if we have
// a reference to the Tab.
mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
actionBar.setSelectedNavigationItem(position);
}
});
// For each of the sections in the app, add a tab to the action bar.
for (int i = 0; i < mFragmentManager.getCount(); i++) {
actionBar.addTab(
actionBar.newTab()
.setText(mFragmentManager.getPageTitle(i))
.setTabListener(this));
}
}
Here is my w/
public class DFragmentManager extends FragmentPagerAdapter {
List<String> mTitle;
List<Integer> mLayoutID;
List<Fragment> mFragments;
FragmentManager mFragmentManager;
public DFragmentManager(FragmentManager fm, List<Integer> layoutIDs, List<String> layoutTitles)
{
super(fm);
mFragments = new ArrayList<Fragment>();
mLayoutID = layoutIDs;
mFragmentManager = fm;
mTitle = layoutTitles;
int size = mLayoutID.size();
for (int i = 0; i < size; i++)
{
mFragments.add(DFragment.newInstance(mLayoutID.get(i)));
}
}
@Override
public Fragment getItem(int position)
{
return mFragments.get(position);
}
@Override
public int getCount()
{
return mFragments.size();
}
@Override
public CharSequence getPageTitle(int position) {
//return (CharSequence)new String("ss");
//return (CharSequence) mFragments.get(position).getTitle();
return (CharSequence) mTitle.get(position);
}
public Fragment getFragment(int position)
{
return mFragments.get(position);
}
public static class DFragment extends Fragment
{
private View mView;
private static final String ARG_LAYOUT_ID = "layout_id";
public DFragment()
{
mView = null;
}
public static final DFragment newInstance(int layoutID)
{
DFragment fragment = new DFragment();
Bundle bundle = new Bundle();
bundle.putInt(ARG_LAYOUT_ID, layoutID);
fragment.setArguments(bundle);
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup group, Bundle bundle)
{
int resourceID = getArguments().getInt(ARG_LAYOUT_ID);
mView = inflater.inflate(resourceID, group, false);
return mView;
}
public View getView()
{
return mView;
}
}
edit:
It's been a while since I revised this problem but I fixed it by not passing the R.id.fragmetnid to the fragment in the args. (the List layoutIds variable). Instead I would pass my own designated id then inflate the fragment within the onCreateView. Seems to be working now.
Try this version of code in your activity:
public class SampleSwipeActivity extends FragmentActivity implements ActionBar.TabListener {
private ViewPager viewPager;
private ActionBar actionBar;
private TabsPagerAdapter mAdapter;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_ACTION_BAR);
setContentView(R.layout.main);
viewPager = (ViewPager) findViewById(R.id.pager);
actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
String [] tabs = new String[]{"Tab1", "Tab2", "Tab3", "Tab4"};
for(String tab : tabs)
{
actionBar.addTab(actionBar.newTab()
.setText(tab)
.setTabListener(this));
}
mAdapter = new TabsPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(mAdapter);
}
@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft)
{
viewPager.setCurrentItem(tab.getPosition());
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener()
{
@Override
public void onPageSelected(int position)
{
actionBar.setSelectedNavigationItem(position);
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2)
{
}
@Override
public void onPageScrollStateChanged(int arg0)
{
}
});
}
@Override
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {
}
@Override
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {
}
}
Since you are using Fragments, I would use FragmentActivity instead of ActionBarActivity.
I hope this helps.
On your code, you can change
// Set up the ViewPager with the sections adapter.
mViewPager = (ViewPager) findViewById(R.id.pager);
with this
// Set up the ViewPager with the sections adapter.
mViewPager = (android.support.v4.view.ViewPager) findViewById(R.id.pager);
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.