2016-11-29 2 views
0

私は動的に構築されたViewPagerを作成しました。ViewPagerで選択が遠く離れているとページが失われます2

このページの1つには、奇妙な動作をするPDFViewerがありますが、問題と疑問は私のViewPagerの実装に関連していて、PDFViewerには関係しないと思います。とにかく、ImageViews、TextViews、その他の種類のものでも同じコードを試しましたが、それだけで私にその動作が与えられます。最初の時間を示すとき

  • PDFViewerが完全に表示され、これはページ番号があるに依存しない:

    問題があります。

  • 1ページを前後にスライドさせてからPDFViewerに戻っても問題ありません。私は背中や前方2以上のページで離れてスライドさせ、その後、PDFViewerに戻った場合
  • は、ビューの内容は、メモリキャッシュを捨てたかのように見えます

完全に空でありますそのコンテンツを再度表示する必要があるときに、PDFViewerに最新表示が通知されませんでした。

私はこれをデバッグしましたが、役に立たないものは見つかりませんでした。

UPDATE: 私はそれを見つけた - 予想通り - 選択されたページが2離れてそれからあるとき、ビューが破棄されます。 それは正常な動作ですか?どうすればこの動作を無効にできますか?

は、これは私のコードの一部ですが、私はそれで何も特別なことがないこととします

アダプタ。おそらくそこに何か問題がありますか?たぶん私はいくつかリフレッシュを呼び出すかここで内部から通知する必要がありますか?

public class ShowAdapter extends PagerAdapter 
{ 
private ArrayList<View> views = new ArrayList<View>(); 

@Override public int getItemPosition (Object object) 
{ 
    int index = views.indexOf (object); 
    if (index == -1) 
     return POSITION_NONE; 
    else 
     return index; 
} 
@Override public Object instantiateItem (ViewGroup container, int position) 
{ 
    View v = views.get (position); 
    container.addView (v); 
    return v; 
} 
@Override public void destroyItem (ViewGroup container, int position, Object object) 
{ 
    container.removeView (views.get (position)); 
} 
@Override public int getCount() 
{ 
    return views.size(); 
} 
@Override public boolean isViewFromObject (View view, Object object) 
{ 
    return view == object; 
} 
public int addView (View v) 
{ 
    return addView (v, views.size()); 
} 
public int addView (View v, int position) 
{ 
    views.add (position, v); 
    return position; 
} 
public int removeView (ViewPager pager, View v) 
{ 
    return removeView (pager, views.indexOf (v)); 
} 
public int removeView (ViewPager pager, int position) 
{ 
    pager.setAdapter (null); 
    views.remove (position); 
    pager.setAdapter (this); 

    return position; 
} 
public View getView (int position) 
{ 
    return views.get (position); 
} 
} 

ありがとうございます。

答えて

0

履歴書の内容リロード:

viewPager.setOffscreenPageLimit(5); 

明らかに5に十分な大きさの限界でありますそれらをすべてアクティブに保ちます。 はまだ、これはかなりハックであり、非常によく私の問題を解決していませんので、私は別のより詳細な質問を開きます。

0

私はこれで遠くの景色破壊しないviewPagerを強制することで、問題を解決することができ

@Override 
    public void onResume() { 
       super.onResume(); 
     // Refresh and reload content here 

    } 
+0

オム、私は私と一緒に発生し、同じ問題を知っている...問題は、ページが変更された場合に生じる、ない活動が一時停止されたとき、私はこれが修正だろうとは思わない... –

+0

。あなたがフラグメントで上書きする必要があるonResumeメソッド –

+0

オーバーライドフラグメントonResumeのみ。活動中ではない –

関連する問題