I have a ListView in which I want to change the selected row to a different color but reset it to the original color when its unselected. I use onItemSelectedListener to set the color, which works fine, but how can I reset the color after it gets unselected?
Thanks.
Create Listener Interface:
public interface ListListener {
void clickListItem(int position);
}
Here is Model class:
public class Route {
String studentName;
boolean colorRed;
public Route(String studentName, boolean colorRed) {
this.studentName=studentName;
this.colorRed=colorRed;
}
public String getStudentName() {
return studentName;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
}
public boolean isColorRed() {
return colorRed;
}
public void setColorRed(boolean colorRed) {
this.colorRed = colorRed;
}
}
Create Adapter class:
public class AAdapter extends BaseAdapter implements View.OnClickListener {
Context context;
private List<Route> routes;
Holder holder;
private static LayoutInflater inflater=null;
ListListener listListener;
public AAdapter(Context context, List<Route> names,ListListener listListener) {
this.routes=names;
this.context=context;
this.listListener=listListener;
inflater = ( LayoutInflater )context.
getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public void onClick(View view) {
listListener.clickListItem((Integer)view.getTag());
}
private class Holder
{
TextView tv;
}
@Override
public Route getItem(int position) {
return routes.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getCount() {
return routes.size();
}
@NonNull
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView==null){
holder=new Holder();
convertView=inflater.inflate(R.layout.custom_layout,null);
holder.tv=(TextView)convertView.findViewById(R.id.textView);
holder.tv.setOnClickListener(this);
convertView.setTag(holder);
}else {
holder=(Holder)convertView.getTag();
}
holder.tv.setText(routes.get(position).getStudentName());
holder.tv.setTag(position);
if (!routes.get(position).colorRed){
holder.tv.setBackgroundColor(Color.GREEN);
}else {
holder.tv.setBackgroundColor(Color.RED);
}
return convertView;
}
}
Now MainActivity Class:
public class MainActivity extends AppCompatActivity implements ListListener{
AAdapter adapter;
ListView lv;
List<Route> myNames;
ListListener listListener=MainActivity.this;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv=(ListView)findViewById(R.id.listnames);
myNames=new ArrayList<>();
/* DEMO DATA U NEED TO FETCH YOUR DATA */
myNames.add(new Route("FIRST",false));
myNames.add(new Route("Second",false));
myNames.add(new Route("Third",false));
myNames.add(new Route("Fourth",false));
myNames.add(new Route("Fifth",false));
myNames.add(new Route("FIRST",false));
myNames.add(new Route("Second",false));
myNames.add(new Route("Third",false));
myNames.add(new Route("Fourth",false));
myNames.add(new Route("Fifth",false));
myNames.add(new Route("FIRST",false));
myNames.add(new Route("Second",false));
myNames.add(new Route("Third",false));
myNames.add(new Route("Fourth",false));
myNames.add(new Route("Fifth",false));
myNames.add(new Route("FIRST",false));
myNames.add(new Route("Second",false));
myNames.add(new Route("Third",false));
myNames.add(new Route("Fourth",false));
myNames.add(new Route("Fifth",false));
adapter = new AAdapter(this, myNames,listListener);
lv.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
@Override
public void clickListItem(int position) {
if(myNames.get(position).colorRed){
myNames.get(position).colorRed=false;
}else {
myNames.get(position).colorRed=true;
}
adapter.notifyDataSetChanged();
}
}