2016-04-09 19 views
1

Bölümler ve alt başlıklar ile bir geridönüşüm görünümü uygulamaya çalışıyorum. Github'da Gabriele Mariotti tarafından güzel bir sınıf buldum, ancak bunu uygulayan bazı sorunlar yaşıyorum. Temel olarak, örnek yerine normal geri dönüştürücüm bağdaştırıcımı kullandığımda, her bölüm üstbilgisi, geri bildirim görüşümün bir öğesinin yerini alır. Örneğin,Kesitli geri dönüşümlü görünüm

. Diyelim ki geridönüşümümün içinde 5 kartım (bir pişirme uygulaması olarak 5 bileşen) var, ama şimdi 2 başlık ekledikten sonra, ilk ve dördüncülerin alt başlıklarla değiştirildiği 3 kartla kaldım. Umarım bu mantıklı gelir. Ayrıca kart pozisyonum tamamen dağınık durumda ve geri dönümcü görüşünün alt kısmına doğru kaydırdığımda, uygulama çöküyor. Birkaç satırlık kod ekliyorum, bu yüzden birileri beni doğru yöne yönlendirebilir. MARIOTTI en Örneğin karşılaştırıldığında, temelde sadece yerine "simpleadapter.java" sınıfının kendi adaptörünü kullanıyorum:

 final RecyclerView rView = (RecyclerView) v.findViewById(R.id.recycler_view); 
    rView.setHasFixedSize(true); 
    rView.setLayoutManager(new GridLayoutManager(getActivity(), 3)); 

    //Your RecyclerView.Adapter 
    RecyclerView.Adapter rcAdapter = new RecyclerViewAdapter(getActivity(), visibleIngredients); 
    //This is the code to provide a sectioned grid 
    List<SectionedGridRecyclerViewAdapter.Section> sections = 
      new ArrayList<SectionedGridRecyclerViewAdapter.Section>(); 

    //Sections 
    sections.add(new SectionedGridRecyclerViewAdapter.Section(0,"Spreads")); 
    sections.add(new SectionedGridRecyclerViewAdapter.Section(2,"Liquid")); 

    //Add your adapter to the sectionAdapter 
    SectionedGridRecyclerViewAdapter.Section[] dummy = new SectionedGridRecyclerViewAdapter.Section[sections.size()]; 
    SectionedGridRecyclerViewAdapter mSectionedAdapter = new 
      SectionedGridRecyclerViewAdapter(getActivity(),R.layout.section,R.id.section_text,rView,rcAdapter); 
    mSectionedAdapter.setSections(sections.toArray(dummy)); 

    //Apply this adapter to the RecyclerView 
    rView.setAdapter(mSectionedAdapter); 
+0

Yığınlayıcınızı gönderin – fractalwrench

cevap

0

: Burada

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.RecyclerViewHolders> { 

private List<Ingredient> itemList; 
private final String TAG = OrderFragment.class.getSimpleName(); 
private Context context; 

public RecyclerViewAdapter(Context context, List<Ingredient> itemList) { 
    this.itemList = itemList; 
    this.context = context; 
} 

public class RecyclerViewHolders extends RecyclerView.ViewHolder{ 
    public RecyclerViewHolders(View itemView) { 
     super(itemView); 
    } 
} 

public class ingredientViewHolder extends RecyclerViewHolders{ 

    public TextView ingredientName; 
    public ImageView ingredientPhoto; 
    public ImageButton infoBtn; 
    public Button regularBtn; 
    public Button extraBtn; 
    public ImageView soldOutPhoto; 
    public ImageView grayOutPhoto; 
    private Context context; 

    public ingredientViewHolder(View itemView) { 
     super(itemView); 
     ingredientName = (TextView)itemView.findViewById(R.id.ingredient_name); 
     ingredientPhoto = (ImageView)itemView.findViewById(R.id.ingredient_photo); 
     infoBtn = (ImageButton) itemView.findViewById(R.id.info); 
     regularBtn = (Button) itemView.findViewById(R.id.regular); 
     extraBtn = (Button) itemView.findViewById(R.id.extra); 
     soldOutPhoto = (ImageView) itemView.findViewById(R.id.sold_out); 
     grayOutPhoto = (ImageView) itemView.findViewById(R.id.gray_out); 
    } 
} 

@Override 
public RecyclerViewHolders onCreateViewHolder(ViewGroup parent, int viewType) { 
    View layoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.ingredient, null); 
    return new ingredientViewHolder(fragment, layoutView); 
} 

@Override 
public void onBindViewHolder(RecyclerViewHolders viewHolder, final int pos) { 
    ingredientViewHolder holder = (ingredientViewHolder) viewHolder; 

    final int position = holder.getAdapterPosition(); 
    final String name = itemList.get(position).getName(); 

    if (MainActivity.order.get(position) == 1) { 
     holder.regularBtn.setSelected(true); 
     holder.extraBtn.setSelected(false); 
    } else if (MainActivity.order.get(position) == 2) { 
     holder.regularBtn.setSelected(false); 
     holder.extraBtn.setSelected(true); 
    } else { 
     holder.regularBtn.setSelected(false); 
     holder.extraBtn.setSelected(false); 
    } 

    holder.ingredientName.setText(itemList.get(position).getName()); 

} 

@Override 
public int getItemCount() { 
    return this.itemList.size(); 
} 
} 

Ve ben fragmanı içimdeki bu recyclerview arıyorum nasıl Problemi anladım. Görünüşe pozisyon onBindViewHolder içine ben aşağıdaki satırı kullanılarak çünkü kapalı gibi:

final int position = holder.getAdapterPosition(); 

Bunu göz ardı ve tüm iyi oldu yerine döner işlev pozisyonunu kullandıktan sonra.

İlgili konular