Android 如何从RecyclerView列表中获取所选项目?
我已经创建了一个界面,用于扩展Recycler视图的功能,并可以监听列表中的每一项,但我无法使其正常工作。当我点击任何项目时,都不会发生任何事情。这是我的密码: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
// 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();
}