【问题标题】:android can't display the fragments in my pager adapter after the third tab在第三个选项卡之后,android 无法在我的寻呼机适配器中显示片段
【发布时间】:2015-01-28 12:55:37
【问题描述】:

我在我的 android 应用程序中使用操作栏选项卡,出于某种原因,我想在第三个选项卡之后加载的片段在我第一次更改为它们之后根本不会加载,无论我滑动到它们还是单击选项卡,结果相同。

这不是特定于正在加载的片段的问题,我知道这一点,因为如果我在我的 fragmentstatepageradapter 中翻转它们,无论我将哪些片段设置为加载到哪个选项卡上,都会发生同样的事情,它总是之后的所有选项卡第三个选项卡无论哪个片段连接到第三个选项卡,我什至使第三个选项卡基本上是一个带有按钮的空白片段,但仍然没有。同样总是在程序启动后的第一个选项卡更改上进行更改需要很长的时间,但是有问题的选项卡通常总是在程序启动后加载到第一个选项卡更改上,但以后再也不会加载了。 需要注意的一件有趣的事情是,我仍然可以单击列表片段列表项,并且当我这样做时发生的操作仍然有效,但项目不可见。还注意到,如果我从最远的选项卡向右滑动(非工作选项卡),第三个选项卡将加载,但如果我从最远的选项卡向左滑动到第三个选项卡,它将不会加载。

这是我的页面更改监听器

 vpager.setOnPageChangeListener(new ViewPager.OnPageChangeListener()
    {
        // This method will be invoked when a new page becomes selected.
        @Override
        public void onPageSelected(int position)
        {

                getActionBar().setSelectedNavigationItem(position);
                getActionBar().getTabAt(position).select();
        }

        // This method will be invoked when the current page is scrolled
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels)
        {
            // Code goes here
        }

        // Called when the scroll state changes:
        // SCROLL_STATE_IDLE, SCROLL_STATE_DRAGGING, SCROLL_STATE_SETTLING
        @Override
        public void onPageScrollStateChanged(int state)
        {
            // Code goes here
        }
    });

这是我的 FragmentStatePagerAdapter

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.view.ViewGroup;

import java.util.List;

public class AppSectionsPagerAdapter extends FragmentStatePagerAdapter
{
private static String[] fragmentNames = { "Example0", "Example1", "Example2","Example3","Example4"};
private FragmentManager fragmentManager = null;
private List<Fragment> fragments=null;
Example0 example0;
Example1 example1;
Example2 example2;
Example3 example3;
Example4 example4;
int numFragments;
int errorcode;
public AppSectionsPagerAdapter(FragmentManager fm)
{
    super(fm);
    numFragments = 5;
    this.fragmentManager = fm;
    example0 = new Example0();
    example1 = new Example1();
    example2 = new Example2();
    example3 = new Example3();
    example4 = new Example4();

}
@Override
public Fragment getItem(int i)
{
    switch (i)
    {
        case 0:
             return example0;
        case 1:
            return example1;
        case 2:
           return example2;
        case 3:
            return example3;
        case 4:
            return example4;

        default:
            Fragment frag = new Error_Fragment();
            Bundle args = new Bundle();
            errorcode = -5;
            //args.putInt(errorcode, i + 1);
            frag.setArguments(args);
            return frag;
    }
}
@Override
public int getCount()
{
   return numFragments;
}

@Override
public CharSequence getPageTitle(int position)
{
    return fragmentNames[position];
}

@Override
public void setPrimaryItem(ViewGroup container, int position, Object object)
{
    super.setPrimaryItem(container,0,object);
}
@Override
public void notifyDataSetChanged()
{
    super.notifyDataSetChanged();
}
@Override
public void destroyItem(ViewGroup collection, int position, Object view)
{
    fragmentManager.executePendingTransactions();
    //fragmentManager.saveFragmentInstanceState(fragments.get(position));
}
}

最后这是我的主要活动代码

public class MainActivity extends FragmentActivity implements
    ActionBar.TabListener
{

 @Override
 public void onCreate(Bundle savedInstanceState)
 {
    super.onCreate(savedInstanceState);
     AppSectionsPagerAdapter mAppSectionsPagerAdapter;
     setContentView(R.layout.activity_main);

      mAppSectionsPagerAdapter = new  AppSectionsPagerAdapter(getSupportFragmentManager());

    // Set up the action bar.
     ActionBar actionBar = getActionBar();

    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    //actionBar.setCustomView(R.layout.tab_layout);

    // Set up the ViewPager, attaching the adapter for when the
    // user swipes between sections.
    vpager = (ViewPager) findViewById(R.id.pager);
    vpager.setAdapter(mAppSectionsPagerAdapter);


 for (int i = 0; i < 5; i++)
     {
        actionBar.addTab(
                actionBar.newTab()
                        .setIcon(tabResIds[i])
                        .setText(mAppSectionsPagerAdapter.getPageTitle(i))
                        .setTabListener(this));

    }
    }

    }

【问题讨论】:

    标签: android android-fragments tabs android-viewpager fragmentstatepageradapter


    【解决方案1】:

    通过从我的片段活动中删除这些行来解决它

            vpager.setPageTransformer(false, new ViewPager.PageTransformer() // page swipe animations
        {
            @Override
            public void transformPage(View page, float position)
            {
                int pageWidth = page.getWidth();
                int pageHeight = page.getHeight();
    
                if (position < -1)   // [-Infinity,-1)
                {
                    // This page is way off-screen to the left.
                    page.setAlpha(1);
                }
                else if(position <= 1)    // Page to the left, page centered, page to the right
                {
                    // modify page view animations here for pages in view
                }
                else     // (1,+Infinity]
                {
                    // This page is way off-screen to the right.
                    page.setAlpha(0);
                }
            }
        });
    

    它正在设置视图寻呼机的转换器动画,它搞砸了。

    【讨论】:

      【解决方案2】:

      通过删除我在我的主要 FragmentActivity 类中设置的 viewpager 的页面转换器来修复它

              vpager.setPageTransformer(false, new ViewPager.PageTransformer() // page swipe animations
          {
              @Override
              public void transformPage(View page, float position)
              {
                  int pageWidth = page.getWidth();
                  int pageHeight = page.getHeight();
      
                  if (position < -1)   // [-Infinity,-1)
                  {
                      // This page is way off-screen to the left.
                      page.setAlpha(1);
                  }
                  else if(position <= 1)    // Page to the left, page centered, page to the right
                  {
                      // modify page view animations here for pages in view
                  }
                  else     // (1,+Infinity]
                  {
                      // This page is way off-screen to the right.
                      page.setAlpha(0);
                  }
              }
          });
      

      删除了这些行

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多