我试图显示我的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;:
提前致谢,祝你有个美好的一天!
答案 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
。