2

をアイコンの追加:私はアイコンを毎秒を追加したいこのようなように私は、拡張リストビューとして働くrecyclerViewを持っているアンドロイドRecyclerViewで

enter image description here

enter image description here

enter image description here

各ヘッダーの子(動的に生成された子アイテム)。赤い円でイメージに言及しています。

ここは私のアダプタクラスです。

public class ExpandableListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { 
    public static final int HEADER = 0; 
    public static final int CHILD = 1; 

    private List<Item> data; 

    public ExpandableListAdapter(List<Item> data) { 
     this.data = data; 
    } 

    @Override 
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int type) { 
     View view = null; 
     Context context = parent.getContext(); 
     float dp = context.getResources().getDisplayMetrics().density; 
     int subItemPaddingLeft = (int) (18 * dp); 
     int subItemPaddingTopAndBottom = (int) (5 * dp); 
     switch (type) { 
      case HEADER: 
       LayoutInflater inflater = (LayoutInflater) parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
       view = inflater.inflate(R.layout.list_header, parent, false); 
       ListHeaderViewHolder header = new ListHeaderViewHolder(view); 
       return header; 
      case CHILD: 
       TextView itemTextView = new TextView(context); 
       itemTextView.setPadding(subItemPaddingLeft, subItemPaddingTopAndBottom, 0, subItemPaddingTopAndBottom); 
       itemTextView.setTextColor(0x88000000); 
       itemTextView.setLayoutParams(
         new ViewGroup.LayoutParams(
           ViewGroup.LayoutParams.MATCH_PARENT, 
           ViewGroup.LayoutParams.WRAP_CONTENT)); 
       return new RecyclerView.ViewHolder(itemTextView) { 
       }; 
     } 
     return null; 
    } 

    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 
     final Item item = data.get(position); 
     switch (item.type) { 
      case HEADER: 
       final ListHeaderViewHolder itemController = (ListHeaderViewHolder) holder; 
       itemController.refferalItem = item; 
       itemController.header_title.setText(item.text); 
       if (item.invisibleChildren == null) { 
        itemController.btn_expand_toggle.setImageResource(R.drawable.circle_minus); 
       } else { 
        itemController.btn_expand_toggle.setImageResource(R.drawable.circle_plus); 
       } 
       itemController.btn_expand_toggle.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         if (item.invisibleChildren == null) { 
          item.invisibleChildren = new ArrayList<Item>(); 
          int count = 0; 
          int pos = data.indexOf(itemController.refferalItem); 
          while (data.size() > pos + 1 && data.get(pos + 1).type == CHILD) { 
           item.invisibleChildren.add(data.remove(pos + 1)); 
           count++; 
          } 
          notifyItemRangeRemoved(pos + 1, count); 
          itemController.btn_expand_toggle.setImageResource(R.drawable.circle_plus); 
         } else { 
          int pos = data.indexOf(itemController.refferalItem); 
          int index = pos + 1; 
          for (Item i : item.invisibleChildren) { 
           data.add(index, i); 
           index++; 
          } 
          notifyItemRangeInserted(pos + 1, index - pos - 1); 
          itemController.btn_expand_toggle.setImageResource(R.drawable.circle_minus); 
          item.invisibleChildren = null; 
         } 
        } 
       }); 
       break; 
      case CHILD: 
       TextView itemTextView = (TextView) holder.itemView; 
       itemTextView.setText(data.get(position).text); 
       break; 
     } 
    } 

    @Override 
    public int getItemViewType(int position) { 
     return data.get(position).type; 
    } 

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

    private static class ListHeaderViewHolder extends RecyclerView.ViewHolder { 
     public TextView header_title; 
     public ImageView btn_expand_toggle; 
     public Item refferalItem; 

     public ListHeaderViewHolder(View itemView) { 
      super(itemView); 
      header_title = (TextView) itemView.findViewById(R.id.header_title); 
      btn_expand_toggle = (ImageView) itemView.findViewById(R.id.btn_expand_toggle); 
     } 
    } 

    public static class Item { 
     public int type; 
     public String text; 
     public List<Item> invisibleChildren; 

     public Item() { 
     } 

     public Item(int type, String text) { 
      this.type = type; 
      this.text = text; 
     } 
    } 
} 

私は、各ヘッダの毎秒子にアイコンを追加することも可能にするために、このアダプタクラスを変更する.How私の要件に応じて、このアダプタクラスを変更することはできませんよ?

注:必要な情報が必要な場合は、お尋ねください。あなたが動的に作成TextViewsに滞在したい場合

+1

あなたがonCreateViewHolderヘッダーと同じこのXMLを使用し、「list_header.xml」などとしてchild.xmlレイアウトを作成しています。 – TejaDroid

答えて

3

、あなたが使用することができます。

itemTextView.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.your_drawable, 0); 

アイコンを設定します。

あなたはレイアウトをより細かく制御したい場合は、私は(レイアウトインフレを使用して)ヘッダのように同様のアプローチを使用することをお勧めし、例えば:

LayoutInflater inflater = (LayoutInflater) parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

switch (type) { 
    case HEADER: 
     view = inflater.inflate(R.layout.list_header, parent, false); 
     ListHeaderViewHolder header = new ListHeaderViewHolder(view); 
     return header; 
    case CHILD: 
     view = inflater.inflate(R.layout.list_child, parent, false); 
     ListChildViewHolder child = new ListChildViewHolder(view); 
     return child; 
} 

あなたに、唯一の毎秒の子供のアイコンを表示するにはonBindViewHolder追加:

itemController1.yourIcon.setVisibility((position % 2 == 0) ? View.VISIBLE : View.GONE); 
+0

アイコンを追加しましたが、すべての子リストにあります。アイコンの2番目の子のみを追加したいです。変更されたコードがあります。 – Adi

+0

http://pastebin.com/1RHF4zvT – Adi

+0

ああ申し訳ありませんこの要件。これを解決するには、Alex Shutovが以下のように書いています:あなたの 'onBindViewHolder'に' itemController1.yourIcon.setVisibility(position%2 == 0)?View.VISIBLE:View.GONEを追加してください; –

関連する問題