Android 安卓-按名称选择卡片
我创建了一个Android 安卓-按名称选择卡片,android,android-layout,android-cardview,Android,Android Layout,Android Cardview,我创建了一个cardwiews列表,其中我使用TextView为每个视图添加了一个名称。我的问题是,我无法根据TextView中的名称选择并单击特定的卡。以下是我迄今为止所做的工作: 家庭活动 @覆盖 创建时受保护的void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); //纸牌 recyclerView=(recyclerView)findViewById(R.id.recycler\u视图); serviceL
cardwiews
列表,其中我使用TextView
为每个视图添加了一个名称。我的问题是,我无法根据TextView
中的名称选择并单击特定的卡。以下是我迄今为止所做的工作:
家庭活动
@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//纸牌
recyclerView=(recyclerView)findViewById(R.id.recycler\u视图);
serviceList=newarraylist();
适配器=新服务适配器(此,服务列表);
RecyclerView.LayoutManager mLayoutManager=新的GridLayoutManager(这个,2);
recyclerView.setLayoutManager(mLayoutManager);
recyclerView.addItemDecoration(新的GridSpacingItemDecoration(2,dpToPx(10),真));
setItemAnimator(新的DefaultItemAnimator());
recyclerView.setAdapter(适配器);
准备服务();
}
私有制备服务(){
服务a=新服务(“服务1”);
服务列表。添加(a);
a=新服务(“服务2”);
服务列表。添加(a);
a=新服务(“服务3”);
服务列表。添加(a);
a=新服务(“服务4”);
服务列表。添加(a);
a=新服务(“服务5”);
服务列表。添加(a);
a=新服务(添加新项目类型);
服务列表。添加(a);
adapter.notifyDataSetChanged();
}
/**
*RecyclerView项目装饰-在网格项目周围提供相等的裕度
*/
公共类GridSpacingItemDecoration扩展了RecyclerView.ItemDecoration{
私人帐户;
私有整数间隔;
私有布尔包含边;
公共网格间距gitemdecoration(整数跨距计数、整数间距、布尔includeEdge){
this.spanCount=spanCount;
这个。间距=间距;
this.includeEdge=includeEdge;
}
}
专用int dpToPx(int dp){
Resources r=getResources();
返回Math.round(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,dp,r.getDisplayMetrics());
}
服务适配器
私有上下文mContext;
私有列表服务列表;
公共类MyViewHolder扩展了RecyclerView.ViewHolder{
公共文本视图标题;
公共MyViewHolder(视图){
超级(视图);
title=(TextView)view.findViewById(R.id.title);
if(title.getText().toString().equals(添加新项目类型)){
view.setOnClickListener(新的view.OnClickListener(){
@凌驾
公共void onClick(视图v){
Intent redirect=新的Intent(v.getContext(),ListServices.class);
v、 getContext().startActivity(重定向);
}
});//结束onclick侦听器
}
}
}
公共服务适配器(上下文mContext、列表服务列表){
this.mContext=mContext;
this.serviceList=serviceList;
}
@凌驾
公共MyViewHolder onCreateViewHolder(视图组父级,int-viewType){
View itemView=LayoutInflater.from(parent.getContext())
.充气(R.layout.service_卡、家长卡、假卡);
返回新的MyViewHolder(itemView);
}
@凌驾
公共无效onBindViewHolder(最终MyViewHolder,内部位置){
Service serv=serviceList.get(位置);
holder.title.setText(serv.getName());
}
@凌驾
public int getItemCount(){
返回serviceList.size();
}
}
当您需要在每一行中使用添加新项目类型检查标题值时,您必须将检查代码移动到onBindViewHolder()
中,以便您可以在viewHolder中创建onBind
方法,并从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
}
}
}
}
公共类服务适配器扩展了RecyclerView.Adapter{
私有上下文;
私有列表服务列表;
公共服务适配器(上下文mContext、列表服务列表){
this.mContext=mContext;
this.serviceList=serviceList;
}
@凌驾
公共MyViewHolder onCreateViewHolder(视图组父级,int-viewType){
View itemView=LayoutInflater.from(parent.getContext())
.充气(R.layout.service_卡、家长卡、假卡);
返回新的MyViewHolder(itemView);
}
@凌驾
公共无效onBindViewHolder(最终MyViewHolder,内部位置){
holder.onBind();
}
@凌驾
public int getItemCount(){
返回serviceList.size();
}
公共类MyViewHolder扩展了RecyclerView.ViewHolder{
公共文本视图标题;
公共MyViewHolder(视图){
超级(视图);
title=(TextView)view.findViewById(R.id.title);
}
public void onBind(){
//您可以在此处执行任何设置数据的操作
字符串ttileVal=serviceList.get(getAdapterPosition()).getName();
title.setText(titleVal);
if(标题相等(添加新项目类型)){
title.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
意向重定向=新意向(mContext,ListServices.class);
mContext.startActivity(重定向);
}
});//结束onclick侦听器
}
}
}
}
view.setOnClickListener。。您在这里使用的是什么视图?@hana在这种情况下,您必须在TextView上设置OnClickListenertitle@hana我需要更多关于确定问题代码的信息
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();
}
}
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
}
}
}
}