Reputation: 74
I am trying to get if a row is clicked background color of row changes to blue and previous selected row background color changes to transparent how can I achieve this
this is my adapter for recycler view
package kva.recyclerview;
import android.content.Context;
import android.graphics.Color;
import android.support.v7.widget.RecyclerView;
import android.text.Layout;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import java.util.ArrayList;
public class adapter extends RecyclerView.Adapter<adapter.MyViewHolder> {
Context context;
LayoutInflater inflater;
ArrayList<String> arrayList;
public adapter(Context context, ArrayList<String> arrayList) {
this.context = context;
this.arrayList = arrayList;
inflater = LayoutInflater.from(context);
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = inflater.inflate(R.layout.lit_item, parent, false);
MyViewHolder holder = new MyViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(MyViewHolder holder, final int position) {
holder.tvphone.setText(arrayList.get(position));
holder.tvemail.setText(arrayList.get(position));
holder.tvname.setText(arrayList.get(position));
}
@Override
public int getItemCount() {
return arrayList.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder {
TextView tvname;
TextView tvemail;
TextView tvphone;
public MyViewHolder(View itemView) {
super(itemView);
tvemail = (TextView) itemView.findViewById(R.id.emailtv);
tvname = (TextView) itemView.findViewById(R.id.nametv);
tvphone = (TextView) itemView.findViewById(R.id.phonetv);
}
}
}
My mainactivity
public class MainActivity extends AppCompatActivity {
RecyclerView recyclerView;
adapter adapter;
View oldView=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ArrayList<String> arrayList=new ArrayList<String>();
arrayList.add("aa");
arrayList.add("aa");
arrayList.add("aa");
arrayList.add("aa");
arrayList.add("aa");
arrayList.add("aa");
arrayList.add("aa");
arrayList.add("aa");
arrayList.add("aa");
arrayList.add("aa");
recyclerView=(RecyclerView)findViewById(R.id.recView);
adapter=new adapter(this,arrayList);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(adapter);
recyclerView.addOnItemTouchListener(
new RecyclerItemClickListener(this, recyclerView ,new RecyclerItemClickListener.OnItemClickListener() {
@Override public void onItemClick(View view, int position) {
view.setBackgroundColor(Color.BLUE);
}
@Override public void onLongItemClick(View view, int position) {
// do whatever
}
})
);
}
}
Upvotes: 1
Views: 5684
Reputation: 452
It is always better to use a mode class to represent data to be loaded into the recycler view. Example,
public class DataModel {
private String name;
private int type;
public DataModel(String name, int type) {
this.name = name;
this.type = type;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Use such model class to load data. In you bindViewHolder you can make a checking say,
if (arrayList.get(position).getType() == 1)
holder.tv_simple_name.setTextColor(mContext.getResources().getColor(R.color.black));
else if (arrayList.get(position).getType() == 2)
holder.tv_simple_name.setTextColor(mContext.getResources().getColor(R.color.blue));
else if (arrayList.get(position).getType() == 3)
holder.tv_simple_name.setTextColor(mContext.getResources().getColor(R.color.transparent));
Add this line to your recyclerview item onClick
for (int i = 0; i < arrayList.size(); i++) {
if (arrayList.get(i).getType() == 2)
arrayList.get(i).setType(3);
else if (itemsList.get(i).getType() == 3)
arrayList.get(i).setType(1);
}
arrayList.get(position).setType(2);
notifyDataSetChanged();
While adding items to model class, set initial value of type as 1 for all items
Upvotes: 1