【问题标题】:recylerview onclick listview open new fragmentsrecyclerview onclick listview 打开新片段
【发布时间】:2017-09-23 17:42:36
【问题描述】:

我正在使用其中有 3 个选项卡的选项卡式活动,其中一个选项卡包含列表的 RecylerView,如果我单击列表,它应该在选项卡式活动中打开新选项卡或片段

这是我的适配器类

public class tabAdapter extends RecyclerView.Adapter<tabAdapter.MyViewHolder> {

private LayoutInflater lf;


List<information> data = Collections.emptyList();

private Context context;




public tabAdapter(Context context,List<information> data){

   this.context=context;
   lf=LayoutInflater.from(context);
   this.data=data;
}


@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    View view = lf.from(parent.getContext()).inflate(R.layout.res,parent,false);

    MyViewHolder ms = new MyViewHolder(view);
    return ms;
}

@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
    information info=data.get(position);

    holder.tx.setText(info.str);
    holder.tm.setImageResource(info.img);


}

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


class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    TextView tx;
    ImageView tm;
    public MyViewHolder(View itemView) {
        super(itemView);
        itemView.setOnClickListener(this);
        tx = (TextView) itemView.findViewById(R.id.ids);
        tm = (ImageView) itemView.findViewById(R.id.imag);
    }

    @Override
    public void onClick(View view) {
        context.startActivity(new Intent(context,tab3.class));

    }
}
}

【问题讨论】:

  • 您的问题到底是什么?你的代码哪里出错了?
  • onClick 方法 m 直接调用片段,当我尝试使用不同的活动时它不起作用
  • 所以我没有得到如何在 onClick 方法上调用新片段怎么做?
  • 是 tab3.class 是 Fragment 吗?
  • 是的 tab3 是片段,所以不能直接打开它

标签: android


【解决方案1】:

在你的 RecyclerView 适配器中定义一个监听器

并在您的活动中覆盖它以更改标签

public class tabAdapter extends RecyclerView.Adapter<tabAdapter.MyViewHolder> {

    private LayoutInflater lf;

    interface MyListener {
        void changeTabs();
    }

    MyListener listener;

    public void setListener(MyListener listener) {
        this.listener = listener;
    }

    List<information> data = Collections.emptyList();

    private Context context;


    public tabAdapter(Context context, List<information> data) {

        this.context = context;
        lf = LayoutInflater.from(context);
        this.data = data;
    }


    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        View view = lf.from(parent.getContext()).inflate(R.layout.res, parent, false);

        MyViewHolder ms = new MyViewHolder(view);
        return ms;
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        information info = data.get(position);

        holder.tx.setText(info.str);
        holder.tm.setImageResource(info.img);
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (listener != null) {
                    listener.changeTabs();
                }
            }
        });
    }

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


    class MyViewHolder extends RecyclerView.ViewHolder {

        TextView tx;
        ImageView tm;

        public MyViewHolder(View itemView) {
            super(itemView);
            itemView.setOnClickListener(this);
            tx = (TextView) itemView.findViewById(R.id.ids);
            tm = (ImageView) itemView.findViewById(R.id.imag);
        }

    }
}

在你的活动中像这样覆盖:

List<information> data = new ArrayList<>();
....
    tabAdapter tabAdapter = new tabAdapter(data);
    tabAdapter.setListener(new MyListener() {
        @Override
        public void changeTabs() {
            // change tabs
        }
    });

【讨论】:

  • 先生,当我单击 recylerview 的列表项时,我只想转到不同的片段
  • @ShubhamDangare 是的,它会为你做这件事,但是因为你不能从 RecyclerView 适配器访问你的片段,我们使用监听器并从活动中覆盖它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-11
  • 2020-07-29
  • 1970-01-01
相关资源
最近更新 更多