java - 具有多种 View 类型的 Recyclerview 不会为 ImageView 显示多种颜色

标签 java android android-recyclerview android-imageview android-adapter

我创建了一个列表。其中我显示了费用金额、费用类型、费用类别和费用时间。

我使用了具有多种 View 类型的RecyclerView,对于 View 类型1,我显示了一个小圆圈,而 View 类型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);
    }

  }

fragment :

 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"));
    }
}

仅比较 12:30 时间,其他时间被跳过。为什么会发生这种情况?

最佳答案

你的内心状况

public void onBindViewHolder(ItemViewHolder itemViewHolder, int i) : if(TYPE1==i)

仅当i==1时才有效。也许这不是你想要的。条件应如下所示:

if (TYPE1==getItemViewType(i))

关于java - 具有多种 View 类型的 Recyclerview 不会为 ImageView 显示多种颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40279289/

相关文章:

java - ViewHolder 类中的最终属性?

android - 如何更新 RecyclerView - notifyDataSetChanged()

java - 构造具有指定行数的表

java - 无法通过Java eclipse连接到Google云SQL

java - 在eclipse中更改多个java文件的包声明

java - 如果我将 LinearLayout 实例化为现有 LinearLayout 的副本,那么一旦我对原始 LinearLayout 执行了一次操作,它也会在副本上完成

android - 无法从 Firestore 获取嵌套数据并将其显示在 Recyclerview 中

java - 不匹配的关闭 ')' 模式异常

c# - 使用 Xamarin 的同一设备 iOS/Android 上的 2 个应用程序之间的通信

android - ADB Android 设备未经授权