繁体   English   中英

为每个卡片视图打开 1 个不同的活动

[英]Open 1 different activity for each cardview

当我单击cardview的一个项目(使用recyclerview )时,我试图弄清楚如何将 go 转换为另一个活动。 我在互联网和这个网站上搜索并尝试了几个选项,但它不起作用(我只尝试了 position 0,其他的也会这样做)。 在这里,使用卡 0 我尝试将 go 设置为“selection_niveau”。

第一次尝试:在 OnClick 内:

public class adapter_categorie_solo extends RecyclerView.Adapter<adapter_categorie_solo.ViewHolder> {

    List<String> titles;
    List<Integer> images;
    LayoutInflater inflater;

    public adapter_categorie_solo(Context ctx, List<String> titles, List<Integer> images){
        this.titles = titles;
        this.images = images;
        this.inflater = LayoutInflater.from(ctx);
    }


    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = inflater.inflate(R.layout.cardview_solo_categorie,parent,false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        holder.title.setText(titles.get(position));
        holder.gridIcon.setImageResource(images.get(position));

    }

    @Override
    public int getItemCount() {
        return titles.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder{
        TextView title;
        ImageView gridIcon;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            title = itemView.findViewById(R.id.textView2);
            gridIcon = itemView.findViewById(R.id.imageView2);

            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(v.getContext(), "Clicked -> " + getAdapterPosition(), Toast.LENGTH_SHORT).show();

                    if (getAdapterPosition()==0)
                    Intent intent = new Intent (this,selection_niveau.class);
                }
            });
        }
    }
}

我收到此错误:

error: variable declaration not allowed here
                    Intent intent = new Intent (this,selection_niveau.class);

第二次尝试:在 onBindViewHolder 里面

public class adapter_categorie_solo extends RecyclerView.Adapter<adapter_categorie_solo.ViewHolder> {

    List<String> titles;
    List<Integer> images;
    LayoutInflater inflater;

    public adapter_categorie_solo(Context ctx, List<String> titles, List<Integer> images){
        this.titles = titles;
        this.images = images;
        this.inflater = LayoutInflater.from(ctx);
    }


    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = inflater.inflate(R.layout.cardview_solo_categorie,parent,false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        holder.title.setText(titles.get(position));
        holder.gridIcon.setImageResource(images.get(position));
        Intent intent;
        if(position == 0)
            intent = new Intent(this, selection_niveau.class);

        holder.itemView.setOnClickListener(new View.OnClickListener(){
            @Override public void onClick(View v){
                Context.startActivity(intent);
            }
        });

    }

    @Override
    public int getItemCount() {
        return titles.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder{
        TextView title;
        ImageView gridIcon;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            title = itemView.findViewById(R.id.textView2);
            gridIcon = itemView.findViewById(R.id.imageView2);

            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(v.getContext(), "Clicked -> " + getAdapterPosition(), Toast.LENGTH_SHORT).show();

                }
            });
        }
    }
}

我得到这个错误:

error: no suitable constructor found for Intent(adapter_categorie_solo,Class<selection_niveau>)
            intent = new Intent(this, selection_niveau.class);
                     ^
    constructor Intent.Intent(String,Uri) is not applicable
      (argument mismatch; adapter_categorie_solo cannot be converted to String)
    constructor Intent.Intent(Context,Class<?>) is not applicable
      (argument mismatch; adapter_categorie_solo cannot be converted to Context)

我试图将“this”更改为仅“context”,但它也不起作用。

这些是我在互联网和这里找到的一些解决方案,但没有一个有效,作为初学者,我真的不明白为什么。

onClick()回调中this关键字将指向 View.OnClickListener 的匿名内部View.OnClickListener 因此您需要改为使用v.getContext()来更改为上下文。

通过将itemView.setOnClickListener替换为:

itemView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Toast.makeText(v.getContext(), "Clicked -> " + getAdapterPosition(), Toast.LENGTH_SHORT).show();

        if (getAdapterPosition()==0) {
            Intent intent = new Intent (v.getContext(), selection_niveau.class);
        }
    }
});

Intent中使用context而不是this

if(position == 0)
     intent = new Intent(context, selection_niveau.class);

Intent构造函数需要一个上下文作为第一个参数,但是 ViewHolder 中的this指的是ViewHolder的实例,因此您需要从视图中获取上下文或使用您在adapter_categorie_solo的构造函数中获得的上下文引用。

public class ViewHolder extends RecyclerView.ViewHolder{
        TextView title;
        ImageView gridIcon;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            title = itemView.findViewById(R.id.textView2);
            gridIcon = itemView.findViewById(R.id.imageView2);

            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(v.getContext(), "Clicked -> " + getAdapterPosition(), Toast.LENGTH_SHORT).show();

                    if (getAdapterPosition()==0)
                    {
                        Intent intent = new Intent (ctx,selection_niveau.class);
                        ctx.startActivity(intent);
                    }
                }
            });
        }
    }

如果您想基于 click position 启动不同的活动,使用switch而不是if将是最佳方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM