Josh Parinussa
Josh Parinussa

Reputation: 643

How to change the indicator color every different cardview?

I create a cardview design with indicator in the left (Red, Green) but i have problem, how can i change the indicator color depends on the status from database. If the status say "No" then the indicator turn red and if "Yes" the indicator turn green.

enter image description here

This is the xml file :

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:card_view="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        card_view:cardCornerRadius="6dp"
        card_view:cardElevation="3dp"
        card_view:cardUseCompatPadding="true">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="horizontal">
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight="0.9">

                <ImageView
                    android:layout_marginLeft="22dp"
                    android:layout_marginTop="14dp"
                    android:layout_marginBottom="14dp"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:background="@drawable/rectangle"/>

            </LinearLayout>
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight="0.1"
                android:orientation="vertical">

                <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                    android:id="@+id/layout_card_item"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_margin="5dp"
                    android:orientation="vertical"
                    android:padding="5dp">


                    <TextView
                        android:id="@+id/txt_order_date"
                        android:textSize="13sp"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"/>

                    <TextView
                        android:id="@+id/txt_customer_name"

                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"/>
                    <TextView
                        android:id="@+id/txt_order_number"
                        android:textSize="12sp"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"/>

                    <TextView
                        android:id="@+id/txt_product_status"
                        android:textSize="12sp"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"/>
                    <TextView
                        android:id="@+id/txt_notes"
                        android:textSize="12sp"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:singleLine="false"
                        android:layout_weight="1"
                        android:maxLines="4"/>

                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="30dp"
                        android:background="@drawable/layout_bg"
                        android:descendantFocusability="blocksDescendants"
                        android:orientation="horizontal"
                        android:layout_below="@+id/layout_card_item"
                        android:gravity="center"
                        android:weightSum="1">

                        <Button
                            android:id="@+id/download_pdf"
                            android:textSize="14sp"
                            android:layout_width="wrap_content"
                            android:layout_height="30dp"
                            android:background="#e1e3e8"
                            android:focusable="false"
                            android:textColor="#000307"
                            android:focusableInTouchMode="true"
                            android:drawableLeft="@drawable/ic_pictogram_download_orange"
                            android:text="  Download PDF"
                             />
                        <!--<ImageButton-->
                            <!--android:layout_width="10dp"-->
                            <!--android:layout_height="10dp"-->
                            <!--android:src="@mipmap/ic_order_download_pdf"/>-->


                    </LinearLayout>


                </LinearLayout>



            </LinearLayout>
        </LinearLayout>



    </android.support.v7.widget.CardView>
</LinearLayout>

This is the adapter :

public class OrderListAdapter extends RecyclerView.Adapter<OrderListAdapter.OrderListViewHolder> {

    private ArrayList<OrderListModel> itemOrderList;

    public OrderListAdapter(ArrayList<OrderListModel> itemOrderList) {
        this.itemOrderList = itemOrderList;
    }

    @Override
    public OrderListViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
        View view = layoutInflater.inflate(R.layout.order_list_item, parent, false);
        return new OrderListViewHolder(view);
    }

    @Override
    public void onBindViewHolder(OrderListViewHolder orderListViewHolder, int position) {
        orderListViewHolder.txtDate.setText(itemOrderList.get(position).getDate());
        orderListViewHolder.txtOrderNumber.setText(itemOrderList.get(position).getOrderNumber());
        orderListViewHolder.txtCustomerName.setText(itemOrderList.get(position).getCustomerName());
        orderListViewHolder.txtProductStatus.setText(itemOrderList.get(position).getProductStatus());
        orderListViewHolder.txtNotes.setText(itemOrderList.get(position).getNotes());
    }

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

    public class OrderListViewHolder extends RecyclerView.ViewHolder{
        private TextView txtDate, txtOrderNumber, txtCustomerName, txtProductStatus,
                txtNotes;

        public OrderListViewHolder(View itemView) {
            super(itemView);
            txtDate = (TextView) itemView.findViewById(R.id.txt_order_date);
            txtOrderNumber = (TextView) itemView.findViewById(R.id.txt_order_number);
            txtCustomerName = (TextView) itemView.findViewById(R.id.txt_customer_name);
            txtProductStatus = (TextView) itemView.findViewById(R.id.txt_product_status);
            txtNotes = (TextView) itemView.findViewById(R.id.txt_notes);
        }
    }
}

This is the main :

public class OrderListFragment extends Fragment {

    private RecyclerView recyclerView;
    private OrderListAdapter adapter;
    private ArrayList<OrderListModel> OrderListArrayList;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_order_list, container, false);
        getActivity().setTitle(R.string.title_mn_order_list);
        addData();

        recyclerView = (RecyclerView) view.findViewById(R.id.orderList_recycler_view);
        RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this.getActivity());
        recyclerView.setLayoutManager(layoutManager);

        adapter = new OrderListAdapter(OrderListArrayList);
        recyclerView.setAdapter(adapter);
        return view;

    }

    void addData(){
        OrderListArrayList = new ArrayList<>();
        OrderListArrayList.add(new OrderListModel(
                "4 Juli 2018 10:54",
                "0001",
                "Jopa",
                "No",
                "Notes"));
        OrderListArrayList.add(new OrderListModel(
                "4 Juli 2018 10:54",
                "0001",
                "Jopa",
                "Yes",
                "Notes"));

    }
}

Do you have any idea how can i change it?

Upvotes: 0

Views: 1136

Answers (5)

urvi joshi
urvi joshi

Reputation: 166

Make two drawable files like @drawable/rectangle, set it with different color you want.

if(status.equals("No") {  
    yourView.setBackground(context.getResources().getDrawable(R.drawable.rectangleWithRed));
}

else if (status.equals("Yes") {
    yourView.setBackground(context.getResources().getDrawable(R.drawable.rectangleWithGreen);
}

Upvotes: 1

Raj
Raj

Reputation: 3001

public void onBindViewHolder(OrderListViewHolder orderListViewHolder, int position) {
    if (OrderListModel.getProductStatus().equals("Yes"))    
        rectangleImageView.setColorFilter(getContext().getResources().getColor(R.color.green));
    } else {
        rectangleImageView.setColorFilter(getContext().getResources().getColor(R.color.red));    
    }
}

Upvotes: 0

user8959091
user8959091

Reputation:

  1. You must give an id to your ImageView say status
  2. In OrderListViewHolder add in your declarations private ImageView status;
  3. In OrderListViewHolder add status = (ImageView) itemView.findViewById(R.id.status);
  4. In OrderListViewHolder add

    if (itemOrderList.get(position).getStatus().equals("Yes")) {
        orderListViewHolder.status.setBackgroundColor(0x00ff00);
    } else { 
        orderListViewHolder.status.setBackgroundColor(0xff0000); }
    

of course you must create the getStatus() method like all the others getSomething()

Upvotes: 1

Shiva Snape
Shiva Snape

Reputation: 544

if you want to change the color according to the status, then on onBindViewHolder of your Recycler Adapter, check for the status and set to desired color.

if(status.equals("Yes")
{
  rectangleImageView.setColor(Color.GREEN);
}
else
{
  rectangleImageView.setColor(Color.RED);
}

Upvotes: 0

Prexx
Prexx

Reputation: 2979

Assuming, that your ImageView is your indicator bar:

<ImageView
android:id="@+id/ivIndicator" <!-- Add this id -->
android:layout_marginLeft="22dp"
android:layout_marginTop="14dp"
android:layout_marginBottom="14dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/rectangle"/>

Get a reference to it in your OrderListViewHolder:

ivIndicator = (ImageView) itemView.findViewById(R.id.ivIndicator);

And then tint your imageview in onBindViewHolder:

if("Yes".equals(itemOrderList.get(position).getStatus())) {
    orderListViewHolder.ivIndicator.setColorFilter(ContextCompat.getColor(activity, android.R.color.green))
else {
    orderListViewHolder.ivIndicator.setColorFilter(ContextCompat.getColor(activity, android.R.color.red))
}

Upvotes: 1

Related Questions