ViewPager中的碎片不会刷新,也不会显示任何内容

时间:2014-12-18 22:22:00

标签: android android-fragments android-viewpager

在观看和研究这个主题的每个帖子之后,我没有为我的错误找到解决方法。

我有一个PagerSlidingTabStrip,它是ViewPager的选择器,ViewPager的适配器是:

public class ViewPagerAdapter extends FragmentStatePagerAdapter{


    public ViewPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public int getItemPosition(Object object) {
        return POSITION_NONE;
    }

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

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

    @Override
    public CharSequence getPageTitle(int position) {
        if (position == 0)
            return "ALL";
        else
            return tipos.get(position-1).getNombre();
    }
}

我在Activity上托管寻呼机。

对象fragments是:

HashMap<Integer,PostFragment> fragments = new HashMap<Integer,PostFragment>();

我将HashMap初始化为:

public void initHashMap(HashMap<Integer,PostFragment> fragments) {
    if (fragments.size() > 0)
        return;

    PostFragment allFragment = new PostFragment();
    Bundle argsAll = new Bundle();
    argsAll.putInt("tipo", 0);
    argsAll.putSerializable("tipos", (Serializable)tipos);
    allFragment.setArguments(argsAll);
    fragments.put(0, allFragment);

    for (int i = 0; i < tipos.size(); i++) {
        PostFragment fragment = new PostFragment();
        Bundle args = new Bundle();
        args.putInt("tipo", i+1);
        args.putSerializable("tipos", (Serializable)tipos);
        fragment.setArguments(args);
        fragments.put(i+1, fragment);
    }
}

问题: 当我滑动时,第一次碎片被加载。如果我快速滑动,一些碎片在回到它们时就开始不再工作了。 有时,当我点击标签条时,它们也不会加载。

我已经尝试了几乎所有我曾经尝试过的解决方法。

这是我托管它的XML:

 <RelativeLayout
    android:id="@+id/parentViews"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_below="@+id/rl1" >

    <RelativeLayout
        android:id="@+id/searchView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/pagerBackground"
        android:visibility="gone" >

        <RelativeLayout
            android:id="@+id/searchRL"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_margin="10dp"
            android:background="@drawable/fondoblancoborder" >

            <ImageView
                android:id="@+id/borrarEditTextIV"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true"
                android:layout_centerVertical="true"
                android:padding="10dp"
                android:src="@drawable/borrar_edittext" />

            <EditText
                android:id="@+id/busquedaTagET"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentLeft="true"
                android:layout_centerVertical="true"
                android:layout_marginBottom="5dp"
                android:layout_marginLeft="10dp"
                android:layout_marginTop="5dp"
                android:layout_toLeftOf="@+id/borrarEditTextIV"
                android:ems="10"
                android:imeOptions="actionSearch" 
                android:inputType="text"
                android:paddingRight="5dp" >
            </EditText>
        </RelativeLayout>

        <com.example.help.resources.FlowLayout
            android:id="@+id/tagLL"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/searchRL"
            android:layout_alignRight="@+id/searchRL"
            android:layout_below="@+id/searchRL"
            android:layout_marginBottom="2dp" >
        </com.example.help.resources.FlowLayout>
    </RelativeLayout>

    <com.astuetz.PagerSlidingTabStrip
        android:id="@+id/tabs"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingTop="15dp"
        android:paddingBottom="15dp"
        android:background="@color/pagerBackground" />

</RelativeLayout>

<android.support.v4.view.ViewPager
    android:id="@+id/viewPager"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_below="@+id/parentViews" >
</android.support.v4.view.ViewPager>

我也尝试了

  • 处理WeakReference
  • 使用.notifyDataChanged()
  • 每次调用getItem()时都会创建片段。
  • setRetainInstance(true)
  • FragmentStatePagerAdapter更改为FragmentPagerAdapter
  • 我不记得的事情,因为这是第7天出现这个错误。

要知道的事情

  • getItem(int position)被称为
  • 即使不加载,也会在每个片段上调用
  • onCreateView

有任何线索吗? 在此先感谢!!

1 个答案:

答案 0 :(得分:0)

为什么覆盖getItemPosition()以返回POSITION_NONE

@Override
public int getItemPosition(Object object) {
    return POSITION_NONE;
}

这意味着每个片段不再对其当前位置有效。

  

主机视图尝试确定某个项目是否已被调用   位置发生了变化。如果位置为,则返回POSITION_UNCHANGED   如果项目为否,则给定项目未更改或POSITION_NONE   适配器中存在的时间更长。

尝试删除此方法。