Android 如何从RecyclerView列表中获取所选项目?

Android 如何从RecyclerView列表中获取所选项目?,android,onclicklistener,android-recyclerview,Android,Onclicklistener,Android Recyclerview,我已经创建了一个界面,用于扩展Recycler视图的功能,并可以监听列表中的每一项,但我无法使其正常工作。当我点击任何项目时,都不会发生任何事情。这是我的密码: // METHOD FOR INITIALIZATION OF RECYCLER VIEW public void initRecyclerView() { // SETTING ARRAY FOR CATEGORIES final CategoryItem categoryItem[] = { new Category

我已经创建了一个界面,用于扩展Recycler视图的功能,并可以监听列表中的每一项,但我无法使其正常工作。当我点击任何项目时,都不会发生任何事情。这是我的密码:

// METHOD FOR INITIALIZATION OF RECYCLER VIEW
public void initRecyclerView() {
    // SETTING ARRAY FOR CATEGORIES
    final CategoryItem categoryItem[] = { new CategoryItem("Birthday", R.drawable.birthday_image),
                                    new CategoryItem("Anniversary", R.drawable.anniversary_image),
                                    new CategoryItem("Anniversary", R.drawable.anniversary_image),
                                    new CategoryItem("Anniversary", R.drawable.anniversary_image),
                                    new CategoryItem("Anniversary", R.drawable.anniversary_image),
                                    new CategoryItem("Anniversary", R.drawable.anniversary_image),
                                    new CategoryItem("Anniversary", R.drawable.anniversary_image),
                                    new CategoryItem("Anniversary", R.drawable.anniversary_image)};

    // FINDING RECYCLER VIEW IN LAYOUT
    recyclerView = (RecyclerView) findViewById(R.id.list);
    recyclerView.setLayoutManager(new GridLayoutManager(this, 2));

    adapter = new CategoriesListAdapter(categoryItem);
    recyclerView.setAdapter(adapter);

    // SETTING ON CLICK LISTENER ON ADAPTER
    adapter.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void setOnItemClick(View view, int position) {
            String clickedItem = String.valueOf(position);
            if ( clickedItem.equals("Birthday") ) {
                Toast.makeText(MainActivity.this, "Clicked on Birthday!", Toast.LENGTH_SHORT).show();
            }
        }
    });
    recyclerView.setItemAnimator(new DefaultItemAnimator());

}
更新:

public interface OnItemClickListener {

public void setOnItemClick(View view, int position);

}
适配器


如果选择了生日,它应该显示toast消息,但不显示任何内容。我正在实例化类的数组,我不知道如何侦听单击的项。那里的答案没有帮助我解决问题。

目前,您正在对照OnItemClick Listener方法setOnItemClick中的字符串“生日”检查您的位置

String clickedItem = String.valueOf(position);
if ( clickedItem.equals("Birthday") ) {
    ...
}
这永远不会是真的。试着为position获取项目,并对照“birth”检查其第一个参数,或者从if语句中拿出您的祝酒词,只需打印出position number,就可以开始了解其中的情况

@Override
public void setOnItemClick(View view, int position) {
    Toast.makeText(MainActivity.this, "Clicked item on position: " + position, Toast.LENGTH_SHORT).show();
}

可能存在重复项,但如何为单击的每个项目启动新的指定活动?在ViewHolder OnClick方法中,您可以返回onItemClickListener.setOnItemClick(v,categoryItems[getAdapterPosition()]),而不只是位置编号,并在启动新活动时使用该对象添加一些额外内容(当然,你需要编辑一下你的接口,因为那样的话,其他地方也需要相应的编辑)。如何启动活动..你可以从我尝试过在类CategoryItem的接口中更改setOnItemClick()方法的第二个参数并在setOnItemClick()的适配器中传递它得到一个例子方法,但没有工作ID您最终得到的结果类似于在MainActivity中您得到的回调
setOnItemClick(查看视图,CategoryItem项)
(从中您应该能够获得项的标题,并且可能出于测试目的,可以使用Toast显示它)从onClick方法中的适配器调用
onItemClickListener.setOnItemClick(v,categoryItems[getAdapterPosition());
?它是否引发了某种异常或发生了什么?我试图检查类CategoryItem的项、实例是否与标题相等,但什么也没有发生。我在toast消息中测试了这一点。
@Override
public void setOnItemClick(View view, int position) {
    Toast.makeText(MainActivity.this, "Clicked item on position: " + position, Toast.LENGTH_SHORT).show();
}