1

Fragment含む がありViewPager、現在ViewPagerは 3 つの異なるアイテムが含まれています。つまり、各アイテム (ページ) には が含まれ、ListView各リストにはそれが所有されていAdapterます。使用できません。FragmentPagerAdapter

ViewPagerの命をサインしますFragment

ListViewsの 3 つのデータをすべてロードしてFragmentに渡す必要がありPagerAdapterますか?

4

2 に答える 2

3
   public  abstract class BaseLazyFragment extends Fragment {

    protected boolean isVisible;


    /**
     * to judge if is visible to user 
     * @param isVisibleToUser
     */
    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);

        if(getUserVisibleHint()) {
            this.isVisible = true;
            onVisible();
        } else {
            this.isVisible = false;
            onInvisible();
        }

    }


    /**
     * when the  fragment is not visible to user 
     */
    protected void onInvisible() {
        Loggy.e("do  onInvisible");
    }

    /**
     * when the fragment is visible to user 
     * 
     * lazyload
     */
    protected void onVisible() {
        Loggy.e("do  onVisible---");
        lazyLoad();
    }

    protected abstract void lazyLoad();

    }

次に、たとえばBaseLazyFragmentを拡張する顧客フラグメントを作成できます

   public class NewsFragment extends BaseLazyFragment {

    private boolean isPrepared; 
    //a flag to judge init action has finished

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_news_page,null);

        //do init

        // when init is finish , set flag true;
        isPrepared = true;

        lazyLoad();

        return view;
    }

    @Override
    protected void lazyLoad() {

         // according this judge, can prevent nullpointerexception 
        if(!isPrepared || !isVisible){
            return;
        }

        // assignment the view 
        // get data from network assignment to varible
    }
}

setUserVisibleHint()

フラグメント作成 setUserVisibleHint() メソッドが最初に onCreateView() よりもヘッダーであるため、oncreateView() が呼び出されないため、lazyLoad() メソッドが NullPointerException をスローする可能性があるため、フラグ変数を作成する必要があります --> isPrepared.

onCreateView()

参照リンク

于 2015-09-22T12:39:05.073 に答える
2

実際には、ロードしているデータの大きさによって異なりますか?

サイズが大きい場合は、ダウンロードしてみてください。各ページに 10 個のアイテムを追加し、そのデータをアダプターに渡してキャッシュします。その後、すべてではなく、正しいページの次のアイテムをダウンロードする遅延ローダー (Google Play アプリのように) を実装します。

したがって、3 つのページすべてに最初の読み込み時に表示するデータが含まれます。ユーザーがさらに必要な場合は、リストの一番下に移動し、「さらに読み込む」を押して、さらに項目を取得できます:)

私の経験から、このソリューションはうまく機能します。もちろん、この種のローダーにはサーバー側を採用する必要があります。

また、より多くの考慮事項があります。多分あなたのデータは「非常に生きている」でしょう。だからあなたはそれについて考えなければなりません。

于 2012-09-19T09:05:09.083 に答える