2015-10-13 141 views
1

我试图显示我的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; 
} 

Adapter返回正确尺寸的getCount

Fragment的XML:

<?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> 

我的适配器代码:

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; 
    } 
} 

而他的xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:custom="http://schemas.android.com/apk/res-auto"  android:orientation="vertical" 
    android:background="@color/hypred_rouge" 
    android:layout_width="match_parent" android:layout_height="match_parent"> 
    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center" 
     android:background="@drawable/border_process_protocole_title"> 
     <com.ylly.hypred.custom.MyTextView 
      android:id="@+id/adapter_view_pager_protocole_label_text_view" 
      android:layout_width="wrap_content" 
      custom:font_name="Arial-Bold.ttf" 
      android:textSize="20sp" 
      android:textColor="@color/hypred_blanc" 
      android:gravity="center" 
      android:layout_height="wrap_content" /> 
    </LinearLayout> 
    <ScrollView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:overScrollMode="never"> 
     <RelativeLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical" 
      android:background="@drawable/border_process_protocole_corps"> 
      <android.support.v7.widget.RecyclerView 
       android:layout_marginTop="15dp" 
       android:id="@+id/adapter_view_pager_protocole_recycler_view" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_centerHorizontal="true" 
       android:scrollbarStyle="insideOverlay" 
       android:layout_marginLeft="5dp" 
       android:layout_marginRight="5dp" 
       android:overScrollMode="never"> 
      </android.support.v7.widget.RecyclerView> 
      <LinearLayout 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:orientation="horizontal" 
       android:weightSum="10"> 
       <com.ylly.hypred.custom.MyTextView 
        android:text="@string/selection_produits" 
        android:textColor="@color/hypred_noir" 
        android:layout_width="0dp" 
        android:layout_weight="7" 
        android:layout_height="wrap_content" 
        android:layout_marginBottom="5dp" 
        android:layout_marginLeft="5dp" 
        android:layout_marginStart="5dp"/> 
       <ImageView 
        android:id="@+id/adapter_view_pager_protocole_panier_rouge" 
        android:layout_width="0dp" 
        android:layout_height="wrap_content" 
        android:layout_weight="3" 
        android:layout_marginBottom="5dp" 
        android:layout_marginEnd="5dp" 
        android:layout_marginRight="5dp" 
        android:src="@drawable/hypred_protocole_panier_rouge"/> 
      </LinearLayout> 
     </RelativeLayout> 
    </ScrollView> 
</LinearLayout> 

我敢肯定,这只是一个愚蠢的错误但我没有看到>:

在此先感谢您,祝您有美好的一天!

+1

这不是一个答案,只是建议,在DP而不是SP –

回答

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",但你设置为您TextViewandroid:layout_width="match_parent"。因此,在这种情况下,您的TextView将填写所有LinearLayout,并且您的ViewPager没有可用空间。

看来,这就是为什么ViewPager没有出现。

也许LinearLayout方向应该是vertical

+0

设置布局保证金/填充我的坏,我没有想到要检查这个......它现在,是的,我必须将它设置为垂直( TextView的显示viewpager的儿童人数。非常感谢! – Kupris

+0

没问题,祝你好运。 –