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
            }

        }


    }


}