0

하나의 목록을 만들었습니다. 그 안에 나는 경비 금액, 경비 유형, 경비 종류 및 경비 시간을 보여주고있다.여러보기 유형이있는 Recycler보기가 이미지보기에 여러 색상을 표시하지 않습니다.

보기 유형 1에 대해 RecyclerView을 여러보기 유형과 함께 사용했습니다. 작은 원 모양을 보이고 유형 2를 보면 큰 원입니다.

비용 유형은 두 개의 다른 원을 표시하는 것으로, 하나는 시간이 작고 다른 하나는 날짜가 큼. 둘 다 볼 수 있습니다.

하지만 지금은 시간에 따라 작은 원, 즉 시간에 다른 색을주고 싶습니다. 문제는 12시 30 분 동안의 노란 색으로 채워진 노란 색만의 원을 볼 수 있고 시간과 다른 원들은 공백이며, 아무런 색도없고 단지 국경이 아님을 보여줍니다.

public class IAdapter extends RecyclerView.Adapter<IAdapter.ItemViewHolder> { 

    ArrayList<Expense> item; 
    public static final int TYPE1=1; 
    Context conext; 

    IAdapter(Context context,ArrayList<Expense> item) { 
     this.conext=context; 
     this.item=item; 
    } 

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

    } 

    @Override 
     public int getItemViewType(int position) { 
      return item.get(position).getExpenseType();// Assume that this return 1 0r 2 
     } 

    @Override 
    public void onBindViewHolder(ItemViewHolder itemViewHolder, int i) { 

     itemViewHolder.amount.setText(item.get(i).amount); 
     itemViewHolder.expense.setText(item.get(i).expense); 

     Expense expense = new Expense(); 
     expense = item.get(i); 

     if(TYPE1==i) { 

      if(expense.getTime().equals("10:30")) { 
       TextDrawable drawable = TextDrawable.builder() 
         .beginConfig() 
         .withBorder(4) 
         .textColor(Color.BLACK) 
         .useFont(Typeface.DEFAULT) 
         .fontSize(25) 
         .bold() 
         .toUpperCase() 
         .endConfig() 
         .buildRound(expense.getTime(), Color.GREEN); 

       itemViewHolder.small.setImageDrawable(drawable); 
      }else if(expense.getTime() 
        .equals("12:30")) { 
       TextDrawable drawable = TextDrawable.builder() 
         .beginConfig() 
         .withBorder(4) 
         .textColor(Color.BLACK) 
         .useFont(Typeface.DEFAULT) 
         .fontSize(25) 
         .bold() 
         .toUpperCase() 
         .endConfig() 
         .buildRound(expense.getTime(), Color.YELLOW); 
       itemViewHolder.small.setImageDrawable(drawable); 
      }else if(expense.getTime().equals("4:30")) { 
       TextDrawable drawable = TextDrawable.builder() 
         .beginConfig() 
         .withBorder(4) 
         .textColor(Color.BLACK) 
         .useFont(Typeface.DEFAULT) 
         .fontSize(25) 
         .bold() 
         .toUpperCase() 
         .endConfig() 
         .buildRound(expense.getTime(), Color.BLUE); 
       itemViewHolder.small.setImageDrawable(drawable); 
      }else if(item.get(i).time.equals("7:30")){ 
       TextDrawable drawable = TextDrawable.builder() 
         .beginConfig() 
         .withBorder(4) 
         .textColor(Color.BLACK) 
         .useFont(Typeface.DEFAULT) 
         .fontSize(25) 
         .bold() 
         .toUpperCase() 
         .endConfig() 
         .buildRound(expense.getTime(), Color.GRAY); 
       itemViewHolder.small.setImageDrawable(drawable); 
      } 
     } 

    } 

    @Override 
    public ItemViewHolder onCreateViewHolder(ViewGroup viewGroup,int viewType) { 

     if (viewType==TYPE1) { 
      View itemView = LayoutInflater. 
        from(viewGroup.getContext()). 
        inflate(R.layout.cardlayout, viewGroup, false); 
      return new ItemViewHolder(itemView,viewType); 
     } else { 
      View itemView = LayoutInflater.from(viewGroup.getContext()). 
        inflate(R.layout.bigcircle, viewGroup, false); 
      ItemViewHolder ivh = new ItemViewHolder(itemView, viewType); 
      return ivh; 
     } 
    } 


    public static class ItemViewHolder extends RecyclerView.ViewHolder { 
     CardView cv; 
     TextView amount; 
     TextView expense; 
     ImageView small; 
     ImageView big; 

     ItemViewHolder(View itemView, int viewType) { 
      super(itemView); 
      amount = (TextView) itemView.findViewById(R.id.txtAmount); 
      expense = (TextView) itemView.findViewById(R.id.txtexpense); 
      cv = (CardView) itemView.findViewById(R.id.card_view); 

      if(viewType==TYPE1) {small = (ImageView) itemView.findViewById(R.id.small);} 
      else{ big=(ImageView)itemView.findViewById(R.id.big); 
       TextDrawable drawable5 = TextDrawable.builder() 
         .beginConfig() 
         .withBorder(4) 
         .textColor(Color.BLACK) 
         .useFont(Typeface.DEFAULT) 
         .fontSize(25) 
         .bold() 
         .toUpperCase() 
         .endConfig() 
         .buildRound("10Jan", Color.CYAN); 
       big.setImageDrawable(drawable5);} 

     } 
    } 
     @Override 
    public void onAttachedToRecyclerView(RecyclerView recyclerView) { 
     super.onAttachedToRecyclerView(recyclerView); 
    } 

    } 

조각 : 그것은 단지 12시 반 시간을 비교하는 것 등이 생략되어

public class ItemFragment extends Fragment { 

    RecyclerView recyclerView; 

    IAdapter adapter; 
    ArrayList<Expense> items; 

    public ItemFragment() { 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_item_list, container, false); 
     setHasOptionsMenu(true); 
     Expense e = new Expense(); 

     recyclerView = (RecyclerView) view.findViewById(R.id.RecyclerView); 
     ImageButton imageButton = (ImageButton) view.findViewById(R.id.imgbtn_fab); 
     LinearLayoutManager llm = new LinearLayoutManager(this.getActivity()); 


     items=new ArrayList<>(); 
     recyclerView.setLayoutManager(llm); 

     recyclerView.setHasFixedSize(true); 

     initializeDataType1(); 

     initRecyclerAdapter(); 

     imageButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Intent intent = new Intent(getActivity(), Main2Activity.class); 
       Bundle bundle = new Bundle(); 
       bundle.putSerializable("list", items); 
       intent.putExtras(bundle); 
       startActivityForResult(intent, 101); 
      } 
     }); 
     return view; 
    } 

    private void initRecyclerAdapter() { 
     adapter = new IAdapter(getActivity(),items); 
     recyclerView.setAdapter(adapter); 
    } 

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if(requestCode == 101 && resultCode == 102) { 
      Bundle bundle = data.getExtras(); 
      Expense ex = (Expense) bundle.getSerializable("ex"); 
      items.add(ex); 
      initRecyclerAdapter(); 
     } 
     super.onActivityResult(requestCode, resultCode, data); 
    } 

    private void initializeDataType1() { 

     items.add(new Expense("1000", "2000", 1,"10:30")); 
     items.add(new Expense("2000", "5000", 1,"12:30")); 
     items.add(new Expense("3000", "400", 2)); 
     items.add(new Expense("1000", "4000", 1,"4:30")); 
     items.add(new Expense("3000", "3000", 2)); 
     items.add(new Expense("2000", "100", 1,"4:30")); 
     items.add(new Expense("2000", "3333", 2)); 
     items.add(new Expense("3000", "shopping", 1,"7:30")); 
     items.add(new Expense("1000", "food", 1,"7:30")); 
     items.add(new Expense("1000", "food", 2)); 
     items.add(new Expense("2000", "drink", 1,"7:30")); 
     items.add(new Expense("3000", "shopping", 2,"10:30")); 
     items.add(new Expense("2000", "3333", 1,"7:30")); 
     items.add(new Expense("3000", "shopping", 1,"7:30")); 
     items.add(new Expense("1000", "food", 1,"12:30")); 
     items.add(new Expense("1000", "food", 1,"7:30")); 
     items.add(new Expense("2000", "drink", 1,"10:30")); 
     items.add(new Expense("3000", "shopping", 1,"10:30")); 
    } 
} 

. 왜 이런 일이 일어나는 걸까요?

답변

1

public void onBindViewHolder(ItemViewHolder itemViewHolder, int i) 내부 귀하의 조건 : if(TYPE1==i)

작품에만 i==1. 아마도 이것은 당신이 원하는 것이 아닙니다. 조건은 다음과 같아야합니다.

if (TYPE1==getItemViewType(i))

+0

예. 감사합니다 .. @R. 자고 스키 – Sid

관련 문제