南京建网站找哪家好,水电行业公司设计logo,在线查企业,做新媒体国外网站比如LinearLayout 或RecyclerView 我们在初始化完成并加载完数据后再次调用measure计算高度再setLayoutParams 会导致后面设置的点击事件失效。
比如#xff1a; RecyclerView rv_select dialog.findViewById(R.id.rv_select); //点击事件rv_select.setOnItemClickListener(n…比如LinearLayout 或RecyclerView 我们在初始化完成并加载完数据后再次调用measure计算高度再setLayoutParams 会导致后面设置的点击事件失效。
比如 RecyclerView rv_select dialog.findViewById(R.id.rv_select); //点击事件rv_select.setOnItemClickListener(new PopupAdapter.OnItemClickListener() {//....});// 重新测量一下rv_select的真实高度并限定最大值,注意measure方法必须放在设置点击事件之后否则点击事件会失效ViewGroup.LayoutParams params rv_select.getLayoutParams();rv_select.measure(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);params.height Math.min(rv_select.getMeasuredHeight(), Tools.dp2px(mContext,290));rv_select.setLayoutParams(params);解决方法
RecyclerView初始化完成后再调用measure方法可能会导致item点击事件失效的原因是measure方法会重新测量并布局RecyclerView的子项视图这可能会破坏已设置的点击监听器。
要解决这个问题可以尝试以下两种解决方案之一
在调用measure方法之前先设置点击监听器 将设置点击监听器的代码放在RecyclerView初始化完成之后、调用measure方法之前执行。这样在调用measure方法后点击监听器仍然有效。
示例代码 // RecyclerView初始化RecyclerView recyclerView findViewById(R.id.recyclerview);// 设置点击监听器recyclerView.setOnItemClickListener(new OnItemClickListener() {Overridepublic void onItemClick(View view, int position) {// 处理点击事件}});// 调用measure方法recyclerView.measure(widthMeasureSpec, heightMeasureSpec);2.避免在初始化完成后再次调用measure方法 如果没有必要再次调用measure方法请确保只在初始化阶段调用一次measure方法。如果需要进行布局更新可以考虑使用其他方法如requestLayout()或invalidate()。