androidlover
androidlover

Reputation: 23

When I scroll listview, values get changed

I have set some conditions for my text views, but when I scroll my list view, some values and later all of them, change status and meet the condition even though 9 is not equal to 5.

what should I do?

p.s.: i tried two different ways for setting conditions

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

    View row = convertView;
    LayoutHandler layoutHandler;
        if (row == null){
            LayoutInflater layoutInflater =(LayoutInflater)this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            row=layoutInflater.inflate(R.layout.row_layout,parent,false);
            layoutHandler = new LayoutHandler();
            layoutHandler.NUMER1=(TextView)row.findViewById(R.id.lin11);
            layoutHandler.NUMER2=(TextView)row.findViewById(R.id.lin12);
            layoutHandler.NUMER3=(TextView)row.findViewById(R.id.lin13);
            row.setTag(layoutHandler);
        }

    else {
            layoutHandler = (LayoutHandler)row.getTag();
        }

    DataProvider dataProvider = (DataProvider)this.getItem(position);
    layoutHandler.NUMER1.setText(dataProvider.getNum1());
    layoutHandler.NUMER2.setText(dataProvider.getNum2());
    layoutHandler.NUMER3.setText(dataProvider.getNum3());

    String equalll = "5";

    if (layoutHandler.NUMER1.getText().toString().equals(equalll)){
        layoutHandler.NUMER1.setTextColor(Color.GREEN);
    }

    if (dataProvider.getNum2().equals(equalll)) {
        layoutHandler.NUMER2.setTextColor(Color.GREEN);
    }

    if (dataProvider.getNum3().equals(koti)) {
        layoutHandler.NUMER3.setTextColor(Color.GREEN);
    }

    return row;

Upvotes: 0

Views: 37

Answers (1)

David Heisnam
David Heisnam

Reputation: 2491

You must also set text color to your TextViews even when not meeting condition because Views are recycled in ListView. This means that your previously set text color will show up in another item even if condition is not met.

Make the following edit to your code.

if (layoutHandler.NUMER1.getText().toString().equals(equalll)){
    layoutHandler.NUMER1.setTextColor(Color.GREEN);
} else {
    layoutHandler.NUMER1.setColor(YOUR_DEFAULT_COLOR);
}

if (dataProvider.getNum2().equals(equalll)) {
    layoutHandler.NUMER2.setTextColor(Color.GREEN);
} else {
    layoutHandler.NUMER2.setColor(YOUR_DEFAULT_COLOR);
}

if (dataProvider.getNum3().equals(koti)) {
    layoutHandler.NUMER3.setTextColor(Color.GREEN);
} else {
    layoutHandler.NUMER3.setColor(YOUR_DEFAULT_COLOR);
}

Upvotes: 1

Related Questions