Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用FragmentStatePagerAdapter交换碎片失败_Android_Android Fragments_Android Viewpager - Fatal编程技术网

Android 使用FragmentStatePagerAdapter交换碎片失败

Android 使用FragmentStatePagerAdapter交换碎片失败,android,android-fragments,android-viewpager,Android,Android Fragments,Android Viewpager,我有以下几点 布局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > &

我有以下几点

布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical" >

  <android.support.v4.view.ViewPager
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

</LinearLayout>
但是现在我

10-24 17:10:12.290: E/AndroidRuntime(1113): java.lang.NullPointerException
10-24 17:10:12.290: E/AndroidRuntime(1113):     at android.support.v4.app.Fragment.setUserVisibleHint(Fragment.java:819)
10-24 17:10:12.290: E/AndroidRuntime(1113):     at android.support.v4.app.FragmentStatePagerAdapter.setPrimaryItem(FragmentStatePagerAdapter.java:152)
10-24 17:10:12.290: E/AndroidRuntime(1113):     at android.support.v4.view.ViewPager.populate(ViewPager.java:1066)
看起来可能是比赛条件

更新


如果我移除setPrimaryItem(g,1,v);然后,它似乎运行良好,直到我去另一个标签,回来。然后它以同样的方式失败。这让我相信我做得有点对,只是遗漏了一些东西。

这是功能版本,我不得不改变很多东西。我仍然想增加后援(如果你可以这样做,你会得到支票),但这应该有助于在同一条船上的任何人

private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter implements ActionBar.TabListener {

    private ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>();
    private List<Fragment> fragments = new ArrayList<Fragment>();

    public ScreenSlidePagerAdapter(FragmentManager fm) {
        super(fm);
        fragments.add(new ScoreFragment());
        fragments.add(new TeamFragment());
        this.addTab(actionBar.newTab().setText("Score"), ScoreFragment.class, null);
        this.addTab(actionBar.newTab().setText("Team"), TeamFragment.class, null);
    }

    @Override
    public Fragment getItem(int position) {
        return fragments.get(position);
    }

    @Override
    public int getCount() {
        return fragments.size();
    }

    public void addTab(ActionBar.Tab tab, Class<?> clss, Bundle args) {
        TabInfo info = new TabInfo(clss, args);
        tab.setTag(info);
        tab.setTabListener(this);
        mTabs.add(info);
        actionBar.addTab(tab);
        notifyDataSetChanged();
    }

    @Override
    public void onTabReselected(Tab arg0,
            android.app.FragmentTransaction arg1) {}

    @Override
    public void onTabSelected(Tab tab, android.app.FragmentTransaction arg1) {
        Object tag = tab.getTag();
        for (int i = 0; i < mTabs.size(); i++) {
            if (mTabs.get(i) == tag) {
                mPager.setCurrentItem(i);
            }
        }
    }

    @Override
    public void onTabUnselected(Tab arg0,
            android.app.FragmentTransaction arg1) {}

    /**
     * @param f the f to set
     */
    public void setF(Fragment f) {
        int loc = actionBar.getSelectedTab().getPosition();
        fragments.set(loc, f);
        notifyDataSetChanged();
    }
    @Override
    public int getItemPosition(Object object) {
        if(object instanceof Fragment){
            if(fragments.contains(object))
                return POSITION_UNCHANGED;

        }
        return POSITION_NONE;
    }
}
私有类ScreenSlidePagerAdapter扩展FragmentStatePagerAdapter实现ActionBar.TabListener{
private ArrayList mtab=new ArrayList();
私有列表片段=新的ArrayList();
公共屏幕SlidePagerAdapter(FragmentManager fm){
超级(fm);
添加(新的ScoreFragment());
添加(新的TeamFragment());
this.addTab(actionBar.newTab().setText(“Score”),ScoreFragment.class,null);
this.addTab(actionBar.newTab().setText(“团队”),TeamFragment.class,null);
}
@凌驾
公共片段getItem(int位置){
返回碎片。获取(位置);
}
@凌驾
public int getCount(){
返回fragments.size();
}
public void addTab(ActionBar.Tab选项卡,类cls,Bundle args){
TabInfo=新的TabInfo(clss,args);
tab.setTag(信息);
tab.setTableListener(此);
添加(信息);
actionBar.addTab(tab);
notifyDataSetChanged();
}
@凌驾
已重新选择公共选项卡(选项卡arg0,
android.app.FragmentTransaction arg1{}
@凌驾
已选择公共事务(选项卡,android.app.FragmentTransaction arg1){
Object tag=tab.getTag();
对于(int i=0;i
尝试使用转换片段来替换、添加或删除片段有时可能不会使用word,它只显示一个空白布局。这个问题的发生是因为一些原因。我有这个问题,我解决了。这就是我在fragmentActivity中实现
onCreate
方法的方式

事情是这样的:

    protected void onCreate(android.os.Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.mybooks);
    }

当我将android.os.Bundle改为Bundle时,问题就消失了。我希望这对任何有同样问题的人都有帮助。

你能用语言准确地解释一下你做了什么吗?我也有同样的问题。碎片永远不会出现。这只是一个空白版面。已经有一段时间了,但给我一两天时间看看我能不能把它弄清楚。谢谢。我已经弄明白了。看来引起我问题的原因和你的有点不同。
private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter implements ActionBar.TabListener {

    private ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>();
    private List<Fragment> fragments = new ArrayList<Fragment>();

    public ScreenSlidePagerAdapter(FragmentManager fm) {
        super(fm);
        fragments.add(new ScoreFragment());
        fragments.add(new TeamFragment());
        this.addTab(actionBar.newTab().setText("Score"), ScoreFragment.class, null);
        this.addTab(actionBar.newTab().setText("Team"), TeamFragment.class, null);
    }

    @Override
    public Fragment getItem(int position) {
        return fragments.get(position);
    }

    @Override
    public int getCount() {
        return fragments.size();
    }

    public void addTab(ActionBar.Tab tab, Class<?> clss, Bundle args) {
        TabInfo info = new TabInfo(clss, args);
        tab.setTag(info);
        tab.setTabListener(this);
        mTabs.add(info);
        actionBar.addTab(tab);
        notifyDataSetChanged();
    }

    @Override
    public void onTabReselected(Tab arg0,
            android.app.FragmentTransaction arg1) {}

    @Override
    public void onTabSelected(Tab tab, android.app.FragmentTransaction arg1) {
        Object tag = tab.getTag();
        for (int i = 0; i < mTabs.size(); i++) {
            if (mTabs.get(i) == tag) {
                mPager.setCurrentItem(i);
            }
        }
    }

    @Override
    public void onTabUnselected(Tab arg0,
            android.app.FragmentTransaction arg1) {}

    /**
     * @param f the f to set
     */
    public void setF(Fragment f) {
        int loc = actionBar.getSelectedTab().getPosition();
        fragments.set(loc, f);
        notifyDataSetChanged();
    }
    @Override
    public int getItemPosition(Object object) {
        if(object instanceof Fragment){
            if(fragments.contains(object))
                return POSITION_UNCHANGED;

        }
        return POSITION_NONE;
    }
}
    protected void onCreate(android.os.Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.mybooks);
    }