当前位置: 首页 > 知识库问答 >
问题:

从RecyclerView中的项获取位置数据

沈运恒
2023-03-14
private SDKP mSelectedPackage;
RecyclerView mRecyclerView;

mRecyclerView.addOnItemTouchListener(new RecyclerItemClickListener(this, new RecyclerItemClickListener.OnItemClickListener() {
            @Override
            public void onItemClick(View view, int position) {
            //I'm STUCK HERE!
             mSelectedPackage = (SDKPackage) mRecyclerView.getItemAtPosition(position);
                    openContextMenu(view);

  /*Toast.makeText(MainActivity.this, "Card at " + position + " is clicked", Toast.LENGTH_SHORT).show();*/
            }
        }));


@Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo)
    {
        mSelectedPackage.inflateMenu(menu);
        super.onCreateContextMenu(menu, v, menuInfo);
    } 

    @Override
    public boolean onContextItemSelected(MenuItem item)
    {
        return mSelectedPackage.onMenuClick(this, item);
    }
public void inflateMenu(ContextMenu menu)
    {
        menu.setHeaderTitle(getPackageName());
        if (isDownloading())
        {
            menu.add(Menu.NONE, 256, Menu.NONE, "Cancel download");
        }
        else if (isInstalled())
        {
            menu.add(Menu.NONE, 257, Menu.NONE, "Uninstall");
        }
        else
        {
            int i = 0;
            for (SDKA archive : archives)
            {
                menu.add(Menu.NONE, i++, Menu.NONE, archive.getArchiveName());
            }
        }
    }

    public boolean onMenuClick(Activity parent, MenuItem item)
    {
        if (item.getItemId() >= 256)
            uninstall();
        else
        {
            SDKA archive = archives.get(item.getItemId());
            if (archive != null)
            {
                archive.onClick(parent);
            }
        }
        return true;
    }

当我使用ListView时-

mListView.setOnItemClickListener(new AdapterView.OnItemClickListener()
            {
                @Override
                public void onItemClick(AdapterView<?> adapter, View view, int position, long arg)
                {
                    mSelectedPackage = (SDKP) mPackageList.getItemAtPosition(position);
                    openContextMenu(view);
                }
            });

共有1个答案

凌展
2023-03-14

在RecyclerView中没有GetItematPosition()的等效项。要解决这个问题,您可以在适配器上创建一个接口,并在Viewholder上实现该接口,该接口将监听onclick()

 public interface OnItemClickListener {
        public void onItemClick(View view, int position);
  }

然后让viewholder实现该接口。

public static class MyViewHolder extends RecyclerView.MyViewHolder implements View.OnClickListener {

private OnItemClickListener mListener;

public MyViewHolder(View itemView) {
    super(itemView);
    itemView.setOnClickListener(this);

}

 public MyViewHolder(View itemView, OnItemClickListener listener) {
    this(itemView);
    mListener = listener;
}


@Override
public void onClick(View v) {
    if (mListener != null) {
        mListener.onItemClick(v, getPosition());
    }
}

-或者,您可以使用rxjava。

 类似资料:
  • 在recyclerView中获取已点击项目的位置,我在recyclerView中创建cardview和链接 我想获取位置,将开关盒设置为每个卡视图的意向活动 当我点击card view I时,他会打开另一个页面,当你点击card view 2时,他会打开另一个页面。 看看我的密码 在recyclerView中获取已点击项目的位置,我在recyclerView中创建cardview和链接 我想获取位

  • 我有一个带有和的activity。我正在使用水平显示图像列表。当我单击中的图像时,activity中的将显示该图像的更大图片。到目前为止一切正常。 现在activity中又多了两个:和。当我单击时,中的图像应该向左转,并且中的缩略图应该反映这个变化。的情况也类似。 我可以旋转。但是,如何在中旋转缩略图呢?如何获取的? 代码: activity XML: 我的activity代码: 我得Recycl

  • 我通过以下方法在项目上创建可选择的文本:

  • 如何在中获取当前项?在我的用例中,RV项占用了所有屏幕空间,因此一次只有一个项。我以前试过谷歌,但没有找到任何有用的东西。

  • 问题内容: 我有一个与和一起进行的活动。我正在使用来水平显示图像列表。当我点击在图像上的在活动中应显示图像的大局观。到目前为止,一切正常。 现在,活动中还有两个:和。当我单击时,中的图像应左移,并且中的缩略图也应反映此更改。与的情况类似。 我能够旋转。但是,如何旋转缩略图?我如何获得的? 码: 活动XML: 我的活动代码: 我的RecyclerView自定义适配器: 问题答案: 我想您正在使用a

  • 问题内容: 每个人,我都试图制作一个音乐应用程序,为此,我在自己的作品中创建了一个Horizo​​ntal ,而我的Horizo​​ntal 正在获取带有艺术家姓名的图像。 但是单击后,我加载了另一个活动。在我的其他活动,我试图在从火力加载SongsData 用。 但是问题是我没有从Firebase获取数据,而是返回了空数据。我在下面提供了我的代码,这是我的Firebase数据库的屏幕截图:-Sc