我正在另一个应用程序中使用此功能,它位于
Fragment
中,但在 DialogFragment
中,这似乎已损坏。通常CardView
的整个表面都应该触发选择更改事件,但它似乎无法找到View
。当填充适配器或单击某个项目时,方法 View.findViewInsideOutShouldExist()
会抱怨:
W couldn't find view with id 2131362542
十六进制表示为
0x7F0A02EE
,根据stable_resource_ids_file
,这等于+@id/wrap
。在我的另一个版本中,它位于 Fragment
中,没有警告存在,而是触发了事件,正如它本来的意思。我注意到的唯一区别是,在 Fragment
中,RecyclerView
附加到 FragmentActivity
,而在 DialogFragment
中,它附加到 ContextThemeWrapper
。
使用的依赖项是:
implementation 'androidx.recyclerview:recyclerview:1.3.2'
implementation 'androidx.recyclerview:recyclerview-selection:1.1.0'
我的问题是,
+@id/wrap
从哪里来以及该怎么办?
隔离问题的建议确实迫使我进行更多调查。实际的问题是,
getItemDetails()
中的方法 Viewholder
返回 null
作为选择键。
public class GenericItemDetailsLookup extends ItemDetailsLookup<Long> {
protected static final String LOG_TAG = GenericItemDetailsLookup.class.getSimpleName();
protected static final boolean mDebug = BuildConfig.DEBUG;
private final RecyclerView recyclerView;
public GenericItemDetailsLookup(RecyclerView recyclerView) {
this.recyclerView = recyclerView;
}
@Nullable
@Override
public ItemDetails<Long> getItemDetails(@NonNull MotionEvent event) {
View view = recyclerView.findChildViewUnder(event.getX(), event.getY());
if (view != null) {
GenericItemAdapter.ViewHolder viewHolder = (((GenericItemAdapter.ViewHolder) recyclerView.getChildViewHolder(view)));
if (viewHolder != null) {
ItemDetails<Long> details = viewHolder.getItemDetails();
Log.d(LOG_TAG, "getItemDetails() -> position=" + details.getPosition() + ", key=" + details.getSelectionKey());
return details;
}
}
return null;
}
}