DialogFragment 中的 RecyclerView 选择

问题描述 投票:0回答:1

我正在另一个应用程序中使用此功能,它位于

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
从哪里来以及该怎么办?

java android android-recyclerview selection
1个回答
0
投票

隔离问题的建议确实迫使我进行更多调查。实际的问题是,

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;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.