ViewPager不会出现

时间:2015-10-13 09:15:38

标签: android android-viewpager

我试图显示我的ViewPager几次没有成功。

事实上,我的fragment layout(包含ViewPager)被分为两部分,并且有重量。

当我检查Adapter的预览时,我看到了我想要的东西,而不是启动应用程序时的情况。

这是我Fragment的代码:

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

    rootView = inflater.inflate(R.layout.fragment_search, container, false);

    if (this.getArguments().getString("search") != null) {
        final List<Produit> produitList =
                HypredDbManager.getDbManager().getProduitDbManager()
                        .getProduitsByString(this.getArguments().getString("search"));

        String product = Integer.toString(produitList.size()) + " ";
        if (produitList.size() > 1) {
            product += getResources().getString(R.string.products);
        } else {
            product += getResources().getString(R.string.product);
        }

        ((TextView) rootView.findViewById(R.id.search_nombre_produits)).setText(product);
        ArrayList<View> viewArrayList = new ArrayList<>();
        for (int i = 0; i < produitList.size(); i++) {
            ProduitItem produitItem = new ProduitItem(rootView.getContext(), produitList.get(i));
            produitItem.setProduitItemListener(new ProduitItem.produitItemListener() {
                @Override
                public void onProduitSelected(Produit produit) {
                    mCallback.changeFragment(produit);
                }

                @Override
                public void ajoutPanier(Produit produit) {
                    SelectionManager.getInstance().addProductToSelection(rootView.getContext(), ProduitSelectionne.fromProduitAndHistorique(produit, ""));
                }
            });
            viewArrayList.add(produitItem);
        }
        HypredTableLayout hypredTableLayout = (HypredTableLayout) rootView.findViewById(R.id.search_tablelayout_produit);
        hypredTableLayout.addChild(viewArrayList, 2, this);

        final ArrayList<Protocole> protocoles = new ArrayList<>();
        protocoles.addAll(HypredDbManager.getDbManager().getProtocoleDbManager()
                .getProtocolesByString(this.getArguments().getString("search")));

        String protocole = Integer.toString(protocoles.size()) + " ";
        if (protocoles.size() > 1) {
            protocole += getResources().getString(R.string.protocoles);
        } else {
            protocole += getResources().getString(R.string.protocole);
        }

        ((TextView) rootView.findViewById(R.id.search_nombre_protocoles)).setText(protocole);

        Log.d(TAG, "protocoles : " +  protocoles.size());

        if(protocoles.size()> 0) {
            ViewPager viewPagerProtocole = (ViewPager) rootView.findViewById(R.id.search_viewpager_protocole);
            ProtocoleAdapterViewPager protocoleAdapterViewPager = new ProtocoleAdapterViewPager(rootView.getContext(), protocoles);
            protocoleAdapterViewPager.setClickOnProductListener(new ProtocoleAdapterViewPager.clickOnProductListener() {
                @Override
                public void appelProduit(long productId) {
                    mCallback.changeFragment(HypredDbManager.getDbManager().getProduitDbManager().getProduitById(productId));
                }

                @Override
                public void ajouterAllProduit(ArrayList<Produit> produitArrayList) {
                    for (int i = 0; i < produitArrayList.size(); i++) {
                        SelectionManager.getInstance().addProductToSelection(getActivity(), ProduitSelectionne.fromProduitAndHistorique(produitArrayList.get(i), ""));
                    }
                }

                @Override
                public void ajouterProduit(Produit produit) {
                    SelectionManager.getInstance().addProductToSelection(getActivity(), ProduitSelectionne.fromProduitAndHistorique(produit, ""));
                }
            });
            viewPagerProtocole.setAdapter(protocoleAdapterViewPager);
            viewPagerProtocole.setCurrentItem(0);
            Log.d(TAG, "protocoleAdapterViewPager : " + protocoleAdapterViewPager.getCount());
            Log.d(TAG, "getcurrentitem : " + viewPagerProtocole.getCurrentItem());
        }
    }
    return rootView;
}

getCount的{​​{1}}返回正确的尺寸。

我的Adapter的xml:

Fragment

我的适配器代码:

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:baselineAligned="false"
    android:weightSum="10">

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_marginBottom="10sp"
        android:layout_marginTop="10sp"
        android:layout_weight="5"
        android:background="@drawable/border_process_organe_right"
        android:gravity="center_horizontal"
        android:orientation="vertical">

        <com.ylly.hypred.custom.MyTextView
            android:id="@+id/search_nombre_produits"
            style="@style/HypredTitle"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="5sp"
            android:layout_marginRight="5sp"
            android:layout_marginTop="10sp"
            android:gravity="center_horizontal"
            android:textColor="@color/hypred_rouge" />

        <ScrollView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10sp"
            android:layout_marginRight="10sp">

            <com.ylly.hypred.custom.HypredTableLayout
                android:id="@+id/search_tablelayout_produit"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:divider="@null" />
        </ScrollView>
    </LinearLayout>

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_marginTop="10dp"
        android:layout_weight="5"
        android:background="@color/hypred_vert"
        android:gravity="center_horizontal"
        android:orientation="horizontal">

        <com.ylly.hypred.custom.MyTextView
            android:id="@+id/search_nombre_protocoles"
            style="@style/HypredTitle"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="5sp"
            android:layout_marginRight="5sp"
            android:layout_marginTop="10sp"
            android:gravity="center_horizontal"
            android:textColor="@color/hypred_rouge" />

        <android.support.v4.view.ViewPager
            android:id="@+id/search_viewpager_protocole"
            android:layout_width="match_parent"
            android:layout_height="match_parent"

            android:background="@color/hypred_rouge" />
    </LinearLayout>
</LinearLayout>

他的xml:

package com.ylly.hypred.search.adapters;

import android.content.Context;
import android.os.Parcelable;
import android.support.v4.view.PagerAdapter;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.ylly.hypred.R;
import com.ylly.hypred.dao.Etape;
import com.ylly.hypred.dao.Produit;
import com.ylly.hypred.dao.Protocole;
import com.ylly.hypred.db.HypredDbManager;
import com.ylly.hypred.process.adapter.AdapterEtape;
import com.ylly.hypred.process.recyclerView.SpacesItemDecoration;

import org.solovyev.android.views.llm.LinearLayoutManager;

import java.util.ArrayList;

/**
 * Created by YLLY on 06-10-2015.
 */
public class ProtocoleAdapterViewPager extends PagerAdapter {


    private ArrayList<Protocole> protocoleArrayList;
    private clickOnProductListener mCallback;
    private Context context;
    private LayoutInflater inflater;

    public interface clickOnProductListener {
        void appelProduit(long productId);

        void ajouterAllProduit(ArrayList<Produit> produitArrayList);

        void ajouterProduit(Produit produit);
    }


    public ProtocoleAdapterViewPager(Context context, ArrayList<Protocole> protocoles) {
        this.protocoleArrayList = new ArrayList<>();
        protocoleArrayList.addAll(protocoles);
        inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

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

    @Override
    public Object instantiateItem(ViewGroup collection, int position) {

        View root = inflater.inflate(R.layout.viewpager_search_container, null);

        FrameLayout frameLayout = (FrameLayout) root.findViewById(R.id.viewpager_search_container_container);

        LinearLayout linearLayout = (LinearLayout) inflater.inflate(R.layout.adapter_view_pager_protocole, null);

        TextView labelProtocoleTextView = (TextView) linearLayout.findViewById(R.id.adapter_view_pager_protocole_label_text_view);
        RecyclerView produitsRecyclerView = (RecyclerView) linearLayout.findViewById(R.id.adapter_view_pager_protocole_recycler_view);
        ImageView imageViewPanierSelectionAll = (ImageView) linearLayout.findViewById(R.id.adapter_view_pager_protocole_panier_rouge);

        labelProtocoleTextView.setText(protocoleArrayList.get(position).getName());
        produitsRecyclerView.addItemDecoration(new SpacesItemDecoration(0, 0, 0, 10));
        produitsRecyclerView.setLayoutManager(new LinearLayoutManager(root.getContext(), LinearLayoutManager.VERTICAL, false));

        final ArrayList<Etape> fEtapeArrayList = new ArrayList<>();

        if(protocoleArrayList.get(position).getEtapeId()!= null) {
            if (HypredDbManager.getDbManager().getEtapeDbManager()
                    .getEtapeById(protocoleArrayList.get(position).getEtapeId()) != null) {
                fEtapeArrayList.add(HypredDbManager.getDbManager().getEtapeDbManager()
                        .getEtapeById(protocoleArrayList.get(position).getEtapeId()));
            }
        }
        if(protocoleArrayList.get(position).getEtapeTwoId()!= null) {
            if (HypredDbManager.getDbManager().getEtapeDbManager()
                    .getEtapeById(protocoleArrayList.get(position).getEtapeTwoId()) != null) {
                fEtapeArrayList.add(HypredDbManager.getDbManager().getEtapeDbManager()
                        .getEtapeById(protocoleArrayList.get(position).getEtapeTwoId()));
            }
        }
        if(protocoleArrayList.get(position).getEtapeThreeId()!= null) {
            if (HypredDbManager.getDbManager().getEtapeDbManager()
                    .getEtapeById(protocoleArrayList.get(position).getEtapeThreeId()) != null) {
                fEtapeArrayList.add(HypredDbManager.getDbManager().getEtapeDbManager()
                        .getEtapeById(protocoleArrayList.get(position).getEtapeThreeId()));
            }
        }
        if(protocoleArrayList.get(position).getEtapeFourId()!= null) {
            if (HypredDbManager.getDbManager().getEtapeDbManager()
                    .getEtapeById(protocoleArrayList.get(position).getEtapeFourId()) != null) {
                fEtapeArrayList.add(HypredDbManager.getDbManager().getEtapeDbManager()
                        .getEtapeById(protocoleArrayList.get(position).getEtapeFourId()));
            }
        }
        if(protocoleArrayList.get(position).getEtapeFiveId()!= null) {
            if (HypredDbManager.getDbManager().getEtapeDbManager()
                    .getEtapeById(protocoleArrayList.get(position).getEtapeFiveId()) != null) {
                fEtapeArrayList.add(HypredDbManager.getDbManager().getEtapeDbManager()
                        .getEtapeById(protocoleArrayList.get(position).getEtapeFiveId()));
            }
        }

        if(protocoleArrayList.get(position).getEtapeSixId()!= null) {
            if (HypredDbManager.getDbManager().getEtapeDbManager()
                    .getEtapeById(protocoleArrayList.get(position).getEtapeSixId()) != null) {
                fEtapeArrayList.add(HypredDbManager.getDbManager().getEtapeDbManager()
                        .getEtapeById(protocoleArrayList.get(position).getEtapeSixId()));
            }
        }


        final AdapterEtape etapeAdapter = new AdapterEtape(fEtapeArrayList, root.getContext());
        etapeAdapter.setClickOnProductListener(new AdapterEtape.clickOnProductListener() {
            @Override
            public void appelerProduit(long produitId) {
                mCallback.appelProduit(produitId);
            }

            @Override
            public void ajouterProduitSelection(Produit produit) {
                mCallback.ajouterProduit(produit);
            }
        });

        produitsRecyclerView.setAdapter(etapeAdapter);

        imageViewPanierSelectionAll.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ArrayList<Produit> produits = new ArrayList<>();
                for (int i = 0; i < fEtapeArrayList.size(); i++) {
                    produits.add((fEtapeArrayList.get(i).getProduit()));
                }
                mCallback.ajouterAllProduit(produits);
            }
        });

        frameLayout.addView(linearLayout);
        collection.addView(root);
        return root;
    }

    @Override
    public void destroyItem(ViewGroup collection, int position, Object view) {
        collection.removeView((View) view);
    }

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

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

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

    public void setClickOnProductListener(clickOnProductListener callback) {
        mCallback = callback;
    }
}

我确定这只是一个愚蠢的错误,但我没有看到它&gt;:

提前致谢,祝你有个美好的一天!

1 个答案:

答案 0 :(得分:1)

检查一下:

<LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_marginTop="10dp"
        android:layout_weight="5"
        android:background="@color/hypred_vert"
        android:gravity="center_horizontal"
        android:orientation="horizontal">

    <com.ylly.hypred.custom.MyTextView
        android:id="@+id/search_nombre_protocoles"
        style="@style/HypredTitle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5sp"
        android:layout_marginRight="5sp"
        android:layout_marginTop="10sp"
        android:gravity="center_horizontal"
        android:textColor="@color/hypred_rouge" />

    <android.support.v4.view.ViewPager
        android:id="@+id/search_viewpager_protocole"
        android:layout_width="match_parent"
        android:layout_height="match_parent"

        android:background="@color/hypred_rouge" />
</LinearLayout>

在此LinearLayout中,您有android:orientation="horizontal",但您设置为TextView android:layout_width="match_parent"。因此,在这种情况下,您的TextView会填写所有LinearLayout,并且ViewPager没有可用空间。

看来,这就是ViewPager没有出现的原因。

可能LinearLayout方向应为vertical