我创建了一个 CardViews
列表,我在其中使用 TextView
为每个列表添加了一个名称。我的问题是我找不到一种方法来根据 TextView
中的名称来选择和单击特定卡片。这是我到目前为止所做的:
主页 Activity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//cards
recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
serviceList = new ArrayList<>();
adapter = new ServicesAdapter(this, serviceList);
RecyclerView.LayoutManager mLayoutManager = new GridLayoutManager(this, 2);
recyclerView.setLayoutManager(mLayoutManager);
recyclerView.addItemDecoration(new GridSpacingItemDecoration(2, dpToPx(10), true));
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(adapter);
prepareServices();
}
private void prepareServices() {
Service a = new Service("Service 1");
serviceList.add(a);
a = new Service("Service 2");
serviceList.add(a);
a = new Service("Service 3");
serviceList.add(a);
a = new Service("Service 4");
serviceList.add(a);
a = new Service("Service 5");
serviceList.add(a);
a = new Service(ADD_NEW_ITEM_TYPE);
serviceList.add(a);
adapter.notifyDataSetChanged();
}
/**
* RecyclerView item decoration - give equal margin around grid item
*/
public class GridSpacingItemDecoration extends RecyclerView.ItemDecoration {
private int spanCount;
private int spacing;
private boolean includeEdge;
public GridSpacingItemDecoration(int spanCount, int spacing, boolean includeEdge) {
this.spanCount = spanCount;
this.spacing = spacing;
this.includeEdge = includeEdge;
}
}
private int dpToPx(int dp) {
Resources r = getResources();
return Math.round(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, r.getDisplayMetrics()));
}
服务适配器
private Context mContext;
private List<Service> serviceList;
public class MyViewHolder extends RecyclerView.ViewHolder {
public TextView title;
public MyViewHolder(View view) {
super(view);
title = (TextView) view.findViewById(R.id.title);
if(title.getText().toString().equals(ADD_NEW_ITEM_TYPE)) {
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent redirect= new Intent(v.getContext(), ListServices.class);
v.getContext().startActivity(redirect);
}
});//end onclick listener
}
}
}
public ServicesAdapter(Context mContext, List<Service> serviceList) {
this.mContext = mContext;
this.serviceList = serviceList;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.service_card, parent, false);
return new MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(final MyViewHolder holder, int position) {
Service serv = serviceList.get(position);
holder.title.setText(serv.getName());
}
@Override
public int getItemCount() {
return serviceList.size();
}
}
最佳答案
由于您需要在每一行中使用 ADD_NEW_ITEM_TYPE
检查标题值,因此您必须将检查代码移动到 onBindViewHolder()
中,以便您可以创建 onBind
viewHolder 中的方法并从 onBindViewHolder()
编辑:我完全重写了 ServicesAdapter 类:
public class ServicesAdapter extends RecyclerView.Adapter<ServicesAdapter.MyViewHolder>{
private Context mContext;
private List<Service> serviceList;
public ServicesAdapter(Context mContext, List<Service> serviceList) {
this.mContext = mContext;
this.serviceList = serviceList;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.service_card, parent, false);
return new MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(final MyViewHolder holder, int position) {
holder.onBind();
}
@Override
public int getItemCount() {
return serviceList.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder {
public TextView title;
public MyViewHolder(View view) {
super(view);
title = (TextView) view.findViewById(R.id.title);
}
public void onBind() {
//do what ever you want here for setting data
String ttileVal = serviceList.get(getAdapterPosition()).getName();
title.setText(titleVal);
if (titleVal.equals(ADD_NEW_ITEM_TYPE)) {
title.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent redirect = new Intent(mContext, ListServices.class);
mContext.startActivity(redirect);
}
});//end onclicklistener
}
}
}
}
关于Android - 按名称选择卡片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42394784/