item数量超过6条就会出现item重复,乱序
代码如下
fragment布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
tools:context="invinciblejoe.com.lightingbuy.main.LightingFragment">
<android.support.v7.widget.RecyclerView
android:id="@+id/commodity_list"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
recyclerview item布局
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/invinciblejoe.com.lightingbuy"
android:layout_width="match_parent"
android:layout_height="150dp"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
app:cardBackgroundColor="@color/orange"
app:cardCornerRadius="20dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/pic"
android:layout_width="match_parent"
android:layout_height="120dp"
android:gravity="center"
android:textSize="50sp"
/>
<TextView
android:clickable="true"
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="60dp"
android:background="@color/orange"
android:textColor="@android:color/white" />
</LinearLayout>
</android.support.v7.widget.CardView>
recycerview adapter
public class LightingRVAdapter extends RecyclerView.Adapter {
private List<Commodity> mlist;
private Context mContext;
private LightingViewHolder viewHolder;
public LightingRVAdapter(Context mContext, List<Commodity> mlist) {
this.mContext = mContext;
this.mlist = mlist;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview_lighting, parent, false);
viewHolder = new LightingViewHolder(v);
return viewHolder;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
Commodity c = mlist.get(position);
viewHolder.mImageView.setText(c.getName());
viewHolder.mTextView.setText(String.valueOf(c.getPrice_discont()));
}
@Override
public int getItemCount() {
return mlist == null ? 0 : mlist.size();
}
private class LightingViewHolder extends RecyclerView.ViewHolder
implements View.OnClickListener
{
public TextView mTextView;
public TextView mImageView;
public LightingViewHolder(View v )
{
super(v);
mTextView = (TextView) v.findViewById(R.id.name);
mImageView = (TextView) v.findViewById(R.id.pic);
mImageView.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.pic :
mTextView.setText("OnChlic");
break;
}
}
}
}
네, 헷갈리는 게 이상하네요...
OnCreateViewHolder는 새 인스턴스를 직접 생성하고 이를 반환합니다. 새 항목이 필요할 때 호출됩니다.
작성하는 방식으로 어댑터 전체에 동일한 홀더가 사용되므로 디스플레이가 캐시되므로 두 번째 항목이 혼동되지 않습니다.
OnBind는 귀하가 생성한 홀더 인스턴스를 제공하고 그곳에서 귀하의 데이터를 운영합니다.
동시에 위 메소드의 반환 유형은 사용자 정의 홀더여야 합니다.
반복적으로 out-of-order가 발생한다는 것은 7번 위치에 표시되는 데이터가 이전에 표시되었던 데이터라는 뜻인가요?
관련 변수의 값을 보려면 onBindViewHolder() 메서드에서 디버그하는 것이 좋습니다.
코드를 보면 문제가 없는 것 같습니다. 언급하신 "insert" 같은 다른 코드가 있나요
이 줄이 핵심입니다
으아악이렇게 쓰는 것이 맞습니다
수정 후 구현된 인터페이스는 다음과 같습니다
으아악 으아악그런 다음 onBindViewHolder에서 직접 데이터를 조작합니다
수정해주셔서 감사합니다Yuan Wenhai 감사합니다