繁体   English   中英

Android片段未显示在Viewpager中

[英]Android Fragment not showing inside Viewpager

我有一个使用滑动选项卡在片段之间导航的android应用程序。 我在xml文件中定义了2个片段,并进行了1个主要活动。 每当我运行我的应用程序时,我都会使用正确的名称“管理”,“扫描”,“关于” ...来正确显示选项卡,但是页面为空白。 当我逐步通过调试器检查onCreateView的返回值(在下面的FragmentPagerAdapter代码中)时,似乎返回的是正确的值...我不知道为什么我总是得到空白屏幕。 有人可以帮忙吗?

这是我的activity_main.xml

<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" />

这是我的MainActivity.java

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));
    }
}

这是我的带有静态片段类的 FragmentPagerAdapter

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;
    }
}

编辑:

自修改此问题以来已有一段时间,但我通过不将R.id.fragmetnid传递给args中的片段来解决此问题。 (List layoutIds变量)。 相反,我将传递自己的指定ID,然后在onCreateView中填充该片段。 似乎现在正在工作。

在您的活动中尝试以下版本的代码:

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) {

   }
}

由于您使用的是片段,因此我将使用FragmentActivity而不是ActionBarActivity。

我希望这有帮助。

在您的代码上,您可以更改

// Set up the ViewPager with the sections adapter.
    mViewPager = (ViewPager) findViewById(R.id.pager);

有了这个

// Set up the ViewPager with the sections adapter.
    mViewPager = (android.support.v4.view.ViewPager) findViewById(R.id.pager);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM