RecyclerView - onClick 中返回的不同视图
RecyclerView - Different view returned in onClick
我的代码使用 recyclerview 并在列表的每个项目(卡片视图)中的各个项目上实现 onClick。其中一项是共享按钮。在 onClick 侦听器中接收到的视图然后通过侦听器传递给片段。
@Override
public void onClick(View v) {
if(mListener != null) {
if(v instanceof ImageButton && v.getTag().equals("share")) {
mListener.onItemClick(v, TYPE_SHARE, getAdapterPosition());
}
}
}
在fragment中的listener实现中,获取到传递的view的root view(card view)
@Override
public void onItemClick(View view, int type, int position) {
if(type == TYPE_SHARE) {
View r = view.getRootView()
View u = r.findViewById(R.id.card_view);//this is the list item
File file = LayoutScreenshot.getScreenshot(u);
}
}
然后通过 canvas 方法获取该视图的屏幕截图。
虽然所有这些都有效,但问题是 onClick 中返回的视图不一定是用户单击的视图。
这张图片是为了展示,我的观点稍微长一点,占据了屏幕的很大一部分。例如,如果用户单击项目 2 中的共享按钮,则返回的视图是项目 1、2 或 3 的视图,具体取决于用户滚动的方向以及当前可见的已单击视图的数量。
我将 "view" 传递给片段然后在那里处理它是不是错了?有人可以提供一些指示吗?
解决方法是在onClick 监听器中不依赖适配器传递的视图。而是使用 LayoutManager 方法。我这样做了
@Override
public void onItemClick(View view, int type, int position) {
if(type == TYPE_SHARE) {
View r = mLayoutManager.findViewByPosition(position);
View u = r.findViewById(R.id.card_view);//this is the list item
File file = LayoutScreenshot.getScreenshot(u);
}
}
所以,我用了
View r = mLayoutManager.findViewByPosition(position);
获取视图,现在视图与列表中单击的项目一致。
我的代码使用 recyclerview 并在列表的每个项目(卡片视图)中的各个项目上实现 onClick。其中一项是共享按钮。在 onClick 侦听器中接收到的视图然后通过侦听器传递给片段。
@Override
public void onClick(View v) {
if(mListener != null) {
if(v instanceof ImageButton && v.getTag().equals("share")) {
mListener.onItemClick(v, TYPE_SHARE, getAdapterPosition());
}
}
}
在fragment中的listener实现中,获取到传递的view的root view(card view)
@Override
public void onItemClick(View view, int type, int position) {
if(type == TYPE_SHARE) {
View r = view.getRootView()
View u = r.findViewById(R.id.card_view);//this is the list item
File file = LayoutScreenshot.getScreenshot(u);
}
}
然后通过 canvas 方法获取该视图的屏幕截图。
虽然所有这些都有效,但问题是 onClick 中返回的视图不一定是用户单击的视图。
这张图片是为了展示,我的观点稍微长一点,占据了屏幕的很大一部分。例如,如果用户单击项目 2 中的共享按钮,则返回的视图是项目 1、2 或 3 的视图,具体取决于用户滚动的方向以及当前可见的已单击视图的数量。
我将 "view" 传递给片段然后在那里处理它是不是错了?有人可以提供一些指示吗?
解决方法是在onClick 监听器中不依赖适配器传递的视图。而是使用 LayoutManager 方法。我这样做了
@Override
public void onItemClick(View view, int type, int position) {
if(type == TYPE_SHARE) {
View r = mLayoutManager.findViewByPosition(position);
View u = r.findViewById(R.id.card_view);//this is the list item
File file = LayoutScreenshot.getScreenshot(u);
}
}
所以,我用了
View r = mLayoutManager.findViewByPosition(position);
获取视图,现在视图与列表中单击的项目一致。