Search code examples
androidlistviewbaseadapter

change textcolor of custom listview clicked item run time


I am using custom list view using Base Adapter.I want to change text color of only clicked Item Of text view.

On click Of list item Dialog will open and on click of OK button want to change text color of only clicked item of list view. Not all list view's item.

I already say that I did not want to change color of whole list View item.

I only want to change color of clicked item's text view.

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    DataBaseAdapter baseAdapter = new DataBaseAdapter(context);

    if (convertView == null) {

        Log.d("tag123", "in getview");
        convertView = inflater.inflate(R.layout.list_item_expense, null);
        viewHolder = new ViewHolder();
        viewHolder.tvDate = (TextView) convertView
                .findViewById(R.id.tvDateExpense);
        viewHolder.ivCatExp = (ImageView) convertView
                .findViewById(R.id.ivCatExpense);
        viewHolder.tvPayee = (TextView) convertView
                .findViewById(R.id.tvPayeeExpense);
        // viewHolder.tvAmt = (TextView) convertView
        // .findViewById(R.id.tvAmtExpense);
        viewHolder.tvBy = (TextView) convertView
                .findViewById(R.id.tvByExpense);

        viewHolder.tvListItemExpense = (com.rey.material.widget.TextView) convertView
                .findViewById(R.id.tvListItemExpense);

        convertView.setTag(viewHolder);

    } else {
        Log.d("tag123", "in getview else condition");
        viewHolder = (ViewHolder) convertView.getTag();
    }

    viewHolder.tvDate.setText(installments.get(position));

    viewHolder.tvPayee.setText(String.valueOf(amount));

    viewHolder.tvBy.setText(String.valueOf(simpleInterest));

    viewHolder.tvListItemExpense.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            ActionItem editItem_for_def_user = new ActionItem(ID_EDIT,
                    "Want to Pay?", context.getResources().getDrawable(
                            R.drawable.fbem_ptp32_popup));
            final QuickAction mQuickAction_for_def_user = new QuickAction(
                    context);

            mQuickAction_for_def_user.addActionItem(editItem_for_def_user);

            mQuickAction_for_def_user
                    .setOnActionItemClickListener(new QuickAction.OnActionItemClickListener() {
                        @SuppressLint("ResourceAsColor")
                        @Override
                        public void onItemClick(QuickAction quickAction,
                                int pos, int actionId) {
                            ActionItem actionItem = quickAction
                                    .getActionItem(pos);

                            if (actionItem != null) {

                                if (viewHolder.tvListItemExpense.isSelected()) {

                                    viewHolder.tvDate.setTextColor(context
                                            .getResources().getColor(
                                                    R.color.light_green));
                                }
                            }
                        }
                    });
            mQuickAction_for_def_user
                    .setOnDismissListener(new QuickAction.OnDismissListener() {
                        @Override
                        public void onDismiss() {

                        }
                    });
            mQuickAction_for_def_user.show(v);
        }
    });
    total = amount + simpleInterest;

    // viewHolder.tvAmt.setText(String.valueOf(total));
    baseAdapter.close();
    return convertView;
}

I want to do like this

enter image description here


Solution

  • Try add this at the beginning of getView():

    final ListView listview = (ListView) parent;
    

    Then in your action, don't change the text color but check the selected item:

    listview.setItemChecked(position, true);
    

    Before return convertView, change text color accordingly:

    if(listview.isItemChecked(position)){
    // set text color for checked items.
    }else{
    // set text color for normal items.
    }