2017-05-01 3 views
0

Ich versuche, Name des Abschnitts zu bekommen, wenn ich auf einen der Artikel dieses bestimmten Abschnitts tippen.Section Item: Get Section Name auf Antippen von Artikel

Ich verfolge this Tutorials, wo meine UI-Daten in zwei Teile unterteilt: Abschnitt und Item (s)

Jetzt für mein Wissen würde Ich mag den Namen des Abschnitts sehen (wenn ich auf jedem tun tippen der Artikel)

Für ein Beispiel, ich habe 5 Abschnitte, wobei jeder Abschnitt 5 Artikel enthält selbst und Nehmen wir an, ich

So wie ich weiß, 2. am 4. Punkt der Sektion angezapft haben, dass, Wie du sehen kannst, erhalte ich den Namen des getappten Items, aber auf Tap möchte ich auch den Namen des Abschnitts bekommen (welches Item habe ich gerade angetippt)?

public class SingleItemRowHolder extends RecyclerView.ViewHolder { 

     .... 

     public SingleItemRowHolder(View view) { 
      super(view); 

      ..... 

      view.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 

        Toast.makeText(v.getContext(), tvTitle.getText(), Toast.LENGTH_SHORT).show(); 

       } 
      }); 

     } 

Antwort

1

Nach der Besichtigung des Link zur Verfügung gestellt, müssen Sie einfach passieren und speichern den Abschnittsnamen in SectionListAdapter wie folgt:

public class SectionListDataAdapter extends RecyclerView.Adapter<SectionListDataAdapter.SingleItemRowHolder> { 

    private ArrayList<SingleItemModel> itemsList; 
    private Context mContext; 
    private String mSectionName; 

    public SectionListDataAdapter(Context context, String sectionName, ArrayList<SingleItemModel> itemsList) { 
     mSectionName = sectionName; 
     this.itemsList = itemsList; 
     this.mContext = context; 
    } 

    @Override 
    public SingleItemRowHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
     View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_single_card, null); 
     SingleItemRowHolder mh = new SingleItemRowHolder(v); 
     return mh; 
    } 

    @Override 
    public void onBindViewHolder(SingleItemRowHolder holder, int i) { 

     SingleItemModel singleItem = itemsList.get(i); 

     holder.tvTitle.setText(singleItem.getName()); 


     /* Glide.with(mContext) 
       .load(feedItem.getImageURL()) 
       .diskCacheStrategy(DiskCacheStrategy.ALL) 
       .centerCrop() 
       .error(R.drawable.bg) 
       .into(feedListRowHolder.thumbView);*/ 
    } 

    @Override 
    public int getItemCount() { 
     return (null != itemsList ? itemsList.size() : 0); 
    } 

    public class SingleItemRowHolder extends RecyclerView.ViewHolder { 

     protected TextView tvTitle; 

     protected ImageView itemImage; 


     public SingleItemRowHolder(View view) { 
      super(view); 

      this.tvTitle = (TextView) view.findViewById(R.id.tvTitle); 
      this.itemImage = (ImageView) view.findViewById(R.id.itemImage); 


      view.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 


        Toast.makeText(v.getContext(), mSectionName +" : "+ tvTitle.getText(), Toast.LENGTH_SHORT).show(); 

       } 
      }); 


     } 

    } 

} 

Jetzt in Ihrem RecyclerViewDataAdapter einfach die von der Initialisierung einer Zeile ändern SectionListDataAdapter in Ihrem onBindViewHolder wie folgt:

public class RecyclerViewDataAdapter extends RecyclerView.Adapter<RecyclerViewDataAdapter.ItemRowHolder> { 

    private ArrayList<SectionDataModel> dataList; 
    private Context mContext; 

    public RecyclerViewDataAdapter(Context context, ArrayList<SectionDataModel> dataList) { 
     this.dataList = dataList; 
     this.mContext = context; 
    } 

    @Override 
    public ItemRowHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
     View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_item, null); 
     ItemRowHolder mh = new ItemRowHolder(v); 
     return mh; 
    } 

    @Override 
    public void onBindViewHolder(ItemRowHolder itemRowHolder, int i) { 

     final String sectionName = dataList.get(i).getHeaderTitle(); 

     ArrayList singleSectionItems = dataList.get(i).getAllItemsInSection(); 

     itemRowHolder.itemTitle.setText(sectionName); 

     SectionListDataAdapter itemListDataAdapter = new SectionListDataAdapter(mContext, sectionName, singleSectionItems); 

     itemRowHolder.recycler_view_list.setHasFixedSize(true); 
     itemRowHolder.recycler_view_list.setLayoutManager(new LinearLayoutManager(mContext, LinearLayoutManager.HORIZONTAL, false)); 
     itemRowHolder.recycler_view_list.setAdapter(itemListDataAdapter); 


     itemRowHolder.btnMore.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 


       Toast.makeText(v.getContext(), "click event on more, "+sectionName , Toast.LENGTH_SHORT).show(); 



      } 
     }); 


     /* Glide.with(mContext) 
       .load(feedItem.getImageURL()) 
       .diskCacheStrategy(DiskCacheStrategy.ALL) 
       .centerCrop() 
       .error(R.drawable.bg) 
       .into(feedListRowHolder.thumbView);*/ 
    } 

    @Override 
    public int getItemCount() { 
     return (null != dataList ? dataList.size() : 0); 
    } 

    public class ItemRowHolder extends RecyclerView.ViewHolder { 

     protected TextView itemTitle; 

     protected RecyclerView recycler_view_list; 

     protected Button btnMore; 



     public ItemRowHolder(View view) { 
      super(view); 

      this.itemTitle = (TextView) view.findViewById(R.id.itemTitle); 
      this.recycler_view_list = (RecyclerView) view.findViewById(R.id.recycler_view_list); 
      this.btnMore= (Button) view.findViewById(R.id.btnMore); 


     } 

    } 

} 
Verwandte Themen