大家好我在我的应用中使用recyclerview
。在显示时它只显示一个项目,但是当我调试它时,每次都会到 onBindViewHolder
方法。这是我的adapter
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.tourist_details_info, parent, false);
return new ViewHolder(itemView);
}
@Override
public void onBindViewHolder(ViewHolder holder, final int position) {
try {
holder.displayName.setText(list.get(position).toUpperCase());
}catch (Exception e){
AxeltaLogger.err("error>>>"+e);
}
}
@Override
public int getItemCount() {
return list.size();
}
这是我的recyclerview
RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
recyclerView.setLayoutManager(mLayoutManager);
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setHasFixedSize(true);
touristAdapter=new TouristInfoAdapter(list);
recyclerView.setAdapter(touristAdapter);
答案 0 :(得分:8)
如果您在RecyclerView
中使用ScrollView
,则将ScrollView
替换为NestedScrollView
。
在RecyclerView中启用android:nestedScrollingEnabled="false"
。
这解决了我的问题。
答案 1 :(得分:1)
tourist_details_info.xml将父高度从match_parent设置为特定高度(100dp或其他)或将wrap_content设为android:layout_height="match_parent"
答案 2 :(得分:1)
这是每个人在使用recyclerView时最常犯的错误。您不必在onBindViewHolder中使用位置,而必须使用
holder.getAdapterPosition()
从列表中获取数据时。您在onBindViewHolder中使用的位置是屏幕上项目的位置,该位置将限制为当前屏幕上的最大项目数。
@Override
public void onBindViewHolder(ViewHolder holder, final int position) {
try {
holder.displayName.setText(list.get(holder.getAdapterPosition().toUpperCase());
}
catch (Exception e) {
AxeltaLogger.err("error>>>" + e);
}
}
希望这有帮助。
答案 3 :(得分:1)
我现在感觉很蠢,但是也许我可以帮助别人:
我的问题是ORIENTATION设置为HORIZONTAL,因为我从其他应用程序位置复制并粘贴,将其更改为VERTICAL效果很好。
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext());
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
答案 4 :(得分:-1)
我遇到了相同的错误,原因与@Acaua所述相同。我也使用了水平线性布局,因此请务必进行检查。
答案 5 :(得分:-1)
问题出在ScrollingView上。当我们在其中使用RecyclerView时,经常会发生这种情况。
您只需使用android.core.widget.NestedScrollView更改ScrollingView。