2012-09-12 9 views
8

私は次のアダプターを使用しているビューページャーを持っています。最初のビューがロードされた後は空に見えますが、そうではありません。次のビューにスクロールしてからスクロールすると、コンテンツが表示されます。ViewPagerの最初のビューが空で表示されるのはなぜですか?

import android.content.Context; 
import android.os.Parcelable; 
import android.support.v4.view.PagerAdapter; 
import android.support.v4.view.ViewPager; 
import android.view.View; 
import android.widget.TextView; 
import java.util.ArrayList; 

public class MyPagerAdapter extends PagerAdapter { 

    Context context; 

    public ArrayList<TextView> mViews; 

    int layoutResourceId; 

    public MyPagerAdapter(Context context) { 
     mViews = new ArrayList<TextView>(); 

    } 

    @Override 
    public void destroyItem(View view, int arg1, Object object) { 
     ((ViewPager)view).removeView((View)object); 
    } 

    @Override 
    public void finishUpdate(View arg0) { 

    } 

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

    @Override 
    public Object instantiateItem(View view, int position) { 
     View myView = mViews.get(position); 
     ((ViewPager)view).addView(myView); 
     return myView; 
    } 

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

    @Override 
    public void restoreState(Parcelable arg0, ClassLoader arg1) { 

    } 

    @Override 
    public Parcelable saveState() { 
     return null; 
    } 

    @Override 
    public void startUpdate(View arg0) { 

    } 

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

} 

そして、ここに私の活動から、それを実装するコードです...(「TEXT 0」が打ち上げに現れている)

public void resetPages() { 
    if (mPageText == null) 
     return; 
    mPagerAdapter.mViews.clear(); 
    for (int i = 0; i < mPageText.size(); i++) { 
     TextView tv = new TextView(this); 
     tv.setTextSize(mSelectedFontSize); 
     tv.setText(mPageText.get(i)); 
     tv.setId(i); 
     tv.setTag(i); 
     tv.invalidate(); 
     mPagerAdapter.mViews.add(tv); 
    } 

mPagerAdapter.notifyDataSetChanged(); 
mViewPager.refreshDrawableState(); 
} 
+0

「mResizeTextView」とは何ですか? –

+0

mResizeTextViewは、指定されたスペースに収まるテキストの量を計算するために配置されたカスタムのテキストビューです。私は複数のページにわたって表示する必要がある長い文字列を持っています。現在のところ、デバッグ用のポピュースでのみ表示されています。 – Josh

+0

上記のコードからmResizeTextView行を削除しました。それは、可視性を変更する必要はありません..まだ同じ問題があります。 – Josh

答えて

0

はfollowindのonCreateメソッドを追加しようとした私のコードは動作します。 resetPages()が不適格なタイミングで呼び出されただけなのでしょうか?

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    mPageText = new LinkedList<CharSequence>(); 
    for (int i=0; i<10; i++) { 
     mPageText.add("TEXT "+i); 
    } 
    this.mPagerAdapter = new MyPagerAdapter(this); 
    this.mViewPager = (ViewPager)this.findViewById(R.id.viewpager); 
    this.mViewPager.setAdapter(mPagerAdapter); 
    resetPages(); 
} 
0

私はこれについてはよく分からないが、あなたがinstantiateItemでビューのためのViewGroupを使用する場合、それは私がのViewGroupとその作業罰金を使用働くかもしれません。

@Override 
public Object instantiateItem(View view, int position) { 
    View myView = mViews.get(position); 
    ((ViewPager)view).addView(myView); 
    return myView; 
} 

ビューは、コンテンツとビューをロードするために時間がかかっているが、コンテンツの後に更新されないため、問題がなければなりません

0

..私の答えが役に立てば幸いでloaded.Tryは

handler.postDelayed(r=new Runnable() 
     { 
      @Override 
      public void run() { 
       if (mPosition == position) 
       { 

        notifyDataSetChanged(); 
        handler.removeCallbacks(r); 


       } 
      } 
     }, 1000); 
内部

を追加されていますアダプターのinstantiateItemを作成して、作成中の1秒後にビューが更新されるようにします。 mPositionは開いている最初のビューの位置です。リスト内のアイテムをクリックしてビューページを開いている場合、アダプタを呼び出すときに選択されているアイテムの位置を渡す必要があります。を0最初の項目が常にビューページで開かれている場合

関連する問題