在某些情况下,我想通过我的脚本在我的导航抽屉(使用RecyclerView构建)中设置一个特定项目。所以我使用下面的代码
jsonData[i].getType().IsArray
问题是,当预期的项目不在视口中时(比如有人向下滚动到导航抽屉的底部),它会给出recyclerView.findViewHolderForPosition(1).itemView.performClick();
(我猜这是预期的行为,因为该项目被回收)。
任何人都可以建议我该怎么办?我想的一种方法是在调用上面的函数之前自动滚动到顶部,但我不确定这是否可行。任何帮助将不胜感激。
答案 0 :(得分:0)
如果视图持有者不可用(它在屏幕外 - 再循环),findViewHolderForPosition
返回null是正确的。在这种情况下,你可以什么都不做。当用户滚动到视图中时,视图将显示新的外观,并且在此时调用绑定(在此之前,项目的视觉外观无关紧要......)
答案 1 :(得分:0)
如果我理解正确,您需要设置RecycleView的选定项目。您可以这样更改RecyclerView.Adapter
:
class YourModel{
public boolean isSelected;
}
public class CustomRecycleAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>{
List<YourModel> listData;
// your View Holder
class ViewHolder extends RecyclerView.ViewHolder{
public View rootLayout; // your root item layout
public ContentViewHolder(View itemView) {
// get root layout
}
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
ViewHolder viewHolder = (ViewHolder)holder;
if(listData.get(position).isSelected{
// set selected like this:
viewHolder.rootLayout.setSelected(true);
}else{
viewHolder.rootLayout.setSelected(false);
}
}
public void setSelected(int position, boolean isSelected){
listData.get(position).isSelected = isSelected;
notifyDataSetChanged();
}
}
最后,在您的活动中使用此代码:
CustomRecycleAdapter recycleAdapter; // init it
recycleAdapter.setSelected(0, true);