java - 如何在 Recyclerview 中实现 onClicklistener 以打开不同的 Activity

标签 java android onclicklistener

我正在使用 Horizo​​ntal Recycleview 在我的应用程序中显示图标。它包含一个 Recycle View 和一个 Mainactivity 类。

我正在尝试在适配器类中使用 onClick 监听器方法,但令我惊讶的是它还没有全部工作并且也无法识别 Intent 并给出无法解析的 Intent 符号。所以我改用 toast 消息,但也成功编译了应用程序,但没有任何反应。

这是我的回收 View 类

public class SnapRecyclerAdapter extends RecyclerView.Adapter<SnapRecyclerAdapter.ReyclerViewHolder> {

    private LayoutInflater layoutInflater;
    private Context context;
    private ArrayList<Item> items;

    public SnapRecyclerAdapter(Context context, ArrayList<Item> items) {
        this.layoutInflater = LayoutInflater.from(context);
        this.context = context;
        this.items = items;
    }

    @Override
    public ReyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View item = layoutInflater.inflate(R.layout.item_recycler_view, parent, false);

        return new ReyclerViewHolder(item);
    }

    @Override
    public void onBindViewHolder(final ReyclerViewHolder holder, int position) {
        Item item = items.get(position);

        holder.image.setImageResource(item.getDrawable());
        holder.appName.setText(item.getName());
    }


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

    class ReyclerViewHolder extends RecyclerView.ViewHolder {
        private ImageView image;
        private TextView appName;

        private ReyclerViewHolder(final View v) {
            super(v);

            image = (ImageView) v.findViewById(R.id.image);
            appName = (TextView) v.findViewById(R.id.app_name);
            context = v.getContext();
        }


        private View.OnClickListener Click=new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                switch(getAdapterPosition())
                {
                    case 1:
                        Toast.makeText(context, "No data available", Toast.LENGTH_SHORT).show();
                }
            }

        };
    }

}

我的 Mainactivity 类是

public class MainActivity extends AppCompatActivity {

    private ArrayList<Item> items;
    private RecyclerView recyclerView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        recyclerView = (RecyclerView) findViewById(R.id.recycler_view);

        createApps();

        SnapHelper snapHelper = new GravitySnapHelper(Gravity.BOTTOM);
        snapHelper.attachToRecyclerView(recyclerView);

        // HORIZONTAL for Gravity START/END and VERTICAL for TOP/BOTTOM
        recyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false));
        recyclerView.setHasFixedSize(true);

        SnapRecyclerAdapter adapter = new SnapRecyclerAdapter(this, items);
        recyclerView.setAdapter(adapter);
    }

    private void createApps() {
        items = new ArrayList<>();
        items.add(new Item("Google+", R.drawable.google_plus));
        items.add(new Item("Facebook", R.drawable.facebook));
        items.add(new Item("LinkedIn", R.drawable.linkedin));
        items.add(new Item("Youtube", R.drawable.youtube));
        items.add(new Item("Instagram", R.drawable.instagram));
        items.add(new Item("Skype", R.drawable.skype));
        items.add(new Item("Twitter", R.drawable.twitter));
        items.add(new Item("Wikipedia", R.drawable.wikipedia));
        items.add(new Item("Whats app", R.drawable.what_apps));
        items.add(new Item("Pokemon Go", R.drawable.pokemon_go));
    }
}

最佳答案

您的实现 setOnClickListener 不正确。您应该为 RecylerView 中的每个 View 设置它,您可以在其中编写代码以启动 Activity 或显示 toast 等。

public class SnapRecyclerAdapter extends RecyclerView.Adapter<SnapRecyclerAdapter.ReyclerViewHolder> {

    private LayoutInflater layoutInflater;
    private Context context;
    private ArrayList<Item> items;

    public SnapRecyclerAdapter(Context context, ArrayList<Item> items) {
        this.layoutInflater = LayoutInflater.from(context);
        this.context = context;
        this.items = items;
    }

    @Override
    public ReyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View item = layoutInflater.inflate(R.layout.item_recycler_view, parent, false);
        ReyclerViewHolder holder = new ReyclerViewHolder(item)
        item.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(context, items.get(holder.getAdapterPosition()).getName(), Toast.LENGTH_SHORT).show();
                // TODO: You can start an activity by using Intent as well.
            }
        });
        return holder;
    }

    @Override
    public void onBindViewHolder(final ReyclerViewHolder holder, int position) {
        Item item = items.get(position);

        holder.image.setImageResource(item.getDrawable());
        holder.appName.setText(item.getName());
    }


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

    class ReyclerViewHolder extends RecyclerView.ViewHolder {
        private ImageView image;
        private TextView appName;

        private ReyclerViewHolder(final View v) {
            super(v);

            image = (ImageView) v.findViewById(R.id.image);
            appName = (TextView) v.findViewById(R.id.app_name);
            context = v.getContext();
        }
    } 
}

关于java - 如何在 Recyclerview 中实现 onClicklistener 以打开不同的 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52212983/

相关文章:

Java - 在后台线程中处理计时器事件

java - 使用 Scanner 从输入文件中读取两行

android - 当我的 AAR 已经包含依赖项时,向我的项目添加依赖项

android - fragment 中的错误非默认构造函数

java - 我不知道请帮忙...无法启动 Activity ComponentInfo{...} : java. lang.NullPointerException

java - 在 View 子类中实现监听器是否存在问题?

java - 尝试通过数组连接一系列字符串

android - 检索 Listview 行数据(由两个 TextView 组成)

单击按钮后 Android 应用程序停止工作

java - 当自动化测试因 Unresolved 错误而失败时,最佳实践是什么?