ViewPager奇怪的行为:显示两页后退出

时间:2018-08-31 13:01:36

标签: android android-viewpager

我在这段代码中注意到一种奇怪的行为:

  • 如果没有使用setOffscreenPageLimit(),它将显示两个页面,然后立即退出并弹出堆栈。我注意到getCount()的调用次数与寻呼机应该显示的页面数量非常接近,而getItem()的调用次数约为5-6次。

  • 当我将OffscreenPageLimit()设置为7时,它将显示8页,然后弹出。

  • 当我将OffscreenPageLimit()设置为100(数据大小)时,它会平滑显示100,并且不会退出。

有什么解释吗?

package ;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import java.util.List;
import java.util.UUID;

public class PagerActivity extends AppCompatActivity {
     public static final String EXTRA_ID =
        "_id";

private ViewPager mViewPager;
private List<Cap> mCaps;

public static Intent newIntent(Context packageContext, UUID id) {
    Intent intent = new Intent(packageContext, PagerActivity.class);
    intent.putExtra(EXTRA_ID, id);
    return intent;
}

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_pager);

    UUID Id = (UUID) getIntent()
            .getSerializableExtra(EXTRA_ID);

    mViewPager = (ViewPager) findViewById(R.id.view_pager);

    mCaps = CapLab.get(this).getCaps();
    FragmentManager fragmentManager = getSupportFragmentManager();
    mViewPager.setAdapter(new FragmentStatePagerAdapter(fragmentManager) {
        @Override
        public Fragment getItem(int position) {
            Cap cap= mCaps.get(position);
            return CapFragment.newInstance(cap.getId());
        }

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

    //mViewPager.setOffscreenPageLimit(100);
    for(int i = 0; i < mCaps.size(); i++) {
        if (mCaps.get(i).getId().equals(id)) {
            mViewPager.setCurrentItem(i);
            break;
        }
    }
}
}

0 个答案:

没有答案