ViewPager加载空白屏幕,直到用户点击屏幕上的任意位置

时间:2016-11-20 13:38:34

标签: android

我已经实现了一个viewpager适配器,滚动和返回的内容工作正常,但问题是,当我启动我的应用程序时,屏幕是空白的,只有当我点击空白屏幕上的任何地方时,viewpager才会加载第一页(项目0)之后其他一切正常。如何让我的应用加载viewpager项而不必先点击:

MainActivity:

    viewPager = (ViewPager) findViewById(R.id.pager);
    viewPager.setAdapter(new ViewPagerAdapter(getApplicationContext(), userid, names, status, phonenumbers, rates, urls, dobyear, dobmonth, dobday, starrate));

    viewPager.setOnPageChangeListener(new OnPageChangeListener() {
        public void onPageScrollStateChanged(int state) {

        }
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

        }
        public void onPageSelected(int position) {

        }
    });

}

ViewPagerAdapter:

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

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

@Override
public boolean isViewFromObject(View view, Object object) {
    return view == (object);
}

@Override
public Object instantiateItem(ViewGroup container, final int position) {
    ImageView imgDisplay, ivRateBar;
    TextView tvName, tvPhoneNumber, tvRate, tvStatus, tvYear, tvDistance;
    inflater = (LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View viewLayout = inflater.inflate(R.layout.viewpager_item, container,false);
    ....
//set my textviews and imges

我试过了:

private static int currentPage = 0;

public void onPageSelected(int position) {
       currentPage = position;
 }

3 个答案:

答案 0 :(得分:0)

好吧,在设置我的viewPager适配器之前使用handler.postDelayed半秒时,它可以正常工作,其背后的逻辑原因可能是在从数据库中检索到所有数据之前加载了viewpager。

答案 1 :(得分:0)

获得正在寻找的数据后,尝试拨打

myAdapter.notifyDataSetChanged();

您只需保存适配器实例,如下所示:

// Change this    
viewPager.setAdapter(new ViewPagerAdapter(getApplicationContext(), userid, names, status, phonenumbers, rates, urls, dobyear, dobmonth, dobday, starrate));
// To this
ViewPagerAdapter myAdapter = new ViewPagerAdapter(getApplicationContext(), userid, names, status, phonenumbers, rates, urls, dobyear, dobmonth, dobday, starrate);
viewPager.setAdapter(myAdapter);

...

// When the data is finished loading (wherever you load the data)
if (myAdapter != null) { 
      myAdapter.notifyDataSetChanged();
}

适配器应使用正确的数据刷新自己。

答案 2 :(得分:0)

唯一对我有用的方法:

if(viewPager.getAdapter()!=null){
    viewPager.getAdapter().notifyDataSetChanged();
    container.removeView(viewPager);
    container.addView(viewPager);
}