从RecyclerView中的ViewHolder调用活动? [英] Calling activity from ViewHolder in RecyclerView?

查看:131
本文介绍了从RecyclerView中的ViewHolder调用活动?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个RecyclerView正在加载我的String数组的内容工作正常,但我想根据他们按下的视图打开一个新的活动。

I've got a RecyclerView which is loading the content of my String arrays which works fine, however I want to open a new activity depending on which view they have pressed.

我所做的是创建一个名为类的数组,如下所示:

What I have done is created an array called classes like so:

<array name="classes">
    <item>ClassOne</item>
    <item>ClassTwo</item>
    <item>ClassThree</item>
    <item>ClassFour</item>
</array>

这些存储在一个数组中,并传递给我下面的MainActivityList适配器:

These are stored in an array, and passed to my MainActivityList adapter below:

String[] classes = resource.getStringArray(R.array.classes);
MainActivityList adapter = new MainActivityList(titles,content, images, classes);
recyclerView.setAdapter(adapter);

我设法将OnClickListener添加到ViewHolder并输出为每个视图分配的类日志,但是我无法理解或开始工作,如何启动另一个活动。

I've managed to add the OnClickListener to the ViewHolder and output what class is assigned to each view to the log, however I cannot figure out or get working, how to launch another activity.

类名称类似于ClassOne.class,例如

The class name would be something like ClassOne.class for example

public class MainActivityList extends RecyclerView.Adapter<MainActivityList.ViewHolder>  {
    private String[] mTitles;
    private String[] mContent;
    private String[] mClasses;
    private TypedArray mImages;
    private Context context;

    public MainActivityList(String[] titles, String[] content, TypedArray images, String[] classes) {
        this.mTitles = titles;
        this.mContent = content;
        this.mImages = images;
        this.mClasses = classes;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup viewGroup,int i) {
        final View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.activity_main_card, viewGroup, false);
        ViewHolder vh = new ViewHolder(v);

        v.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                ViewHolder vh = (ViewHolder)v.getTag();
                Log.v("DEBUG", "Clicked" + vh.classes);
            }
        });
        return vh;
    }

    public void onBindViewHolder(ViewHolder holder, int position) {
        holder.titleView.setText(mTitles[position]);
        holder.contentView.setText(mContent[position]);
        holder.imageView.setImageDrawable(mImages.getDrawable(position));
        holder.classes = mClasses[position];
    }

    public class ViewHolder extends RecyclerView.ViewHolder {
        public  TextView titleView;
        public  TextView contentView;
        public  ImageView imageView;
        public String classes;

        public ViewHolder(View v) {
            super(v);
            titleView = (TextView) v.findViewById(R.id.card_title);
            contentView = (TextView) v.findViewById(R.id.card_content);
            imageView = (ImageView)v.findViewById(R.id.card_image);
            v.setTag(this);
        }
    }

    @Override
    public int getItemCount() {
        return mTitles.length;
    }

}


推荐答案

我也在寻找解决方案,我找到了这个帖子:
http://venomvendor.blogspot.sg/2014/07/setting-onitemclicklistener-for-recycler-view.html

I was also looking for a solution, and I found this post: http://venomvendor.blogspot.sg/2014/07/setting-onitemclicklistener-for-recycler-view.html

使用OnItemClickListener接口,你应该可以在你的活动中调用 startActivity

By using the OnItemClickListener interface, you should be able to call startActivity in your activity.

adapter.SetOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(View v , int position) {
        // This is in an Activity so should be able to start new activity, etc.


    }
});

更新:我已经测试过,博客中提到的方法适合我。

Update: I have tested, the method mentioned in the blog worked for me.

这篇关于从RecyclerView中的ViewHolder调用活动?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆