繁体   English   中英

RecyclerView - 我不能添加超过 1 行

[英]RecyclerView - I can't add more than 1 line

我在 RecyclerView 中添加超过 1 行(项目)时遇到问题,当我点击按钮时,该项目会覆盖前一个项目,但是如果我创建一个 List<>,并且在 onCreate 上使用硬编码的数据,它可以添加更多在 RecyclerView 中超过 1 行。 按照代码:

清单清单适配器

public class ListChecklistAdapter extends RecyclerView.Adapter<ListChecklistAdapter.ListChecklistViewHolder> {
    private List<Checklist> mChecklist;
    private Context mCtx;

    public ListChecklistAdapter(Context ctx, List<Checklist> checklists) {
        mCtx = ctx;
        mChecklist = checklists;
    }

    @Override
    public ListChecklistViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(mCtx).inflate(R.layout.item_checklist, parent, false);
        return new ListChecklistViewHolder(view);
    }

    @Override
    public void onBindViewHolder(ListChecklistViewHolder holder, int position) {
        holder.cbItem.setText(mChecklist.get(position).getDescricao());
        holder.cbItem.setChecked(mChecklist.get(position).isCheckado());
    }

    @Override
    public int getItemCount() {
        return mChecklist.size();
    }

    public class ListChecklistViewHolder extends RecyclerView.ViewHolder {
        @BindView(R.id.item_checkbox)
        CheckBox cbItem;

        public ListChecklistViewHolder(View view) {
            super(view);
            ButterKnife.bind(this, view);
        }
    }

    public void refreshData(List<Checklist> item) {
        this.mChecklist.clear();
        this.mChecklist.addAll(item);
        notifyDataSetChanged();
    }
}

item_checklist

<RelativeLayout 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">

    <CheckBox
        android:id="@+id/item_checkbox"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="5dp"
        android:paddingLeft="6dp"
        android:text=" "
        tools:text="Exemplo de item de lista" />

</RelativeLayout>

主要活动

public class MainActivity extends AppCompatActivity {
    @BindView(R.id.rcv_lista)
    RecyclerView rvLista;
    int valor;
    private List<Checklist> lista;
    private ListChecklistAdapter listChecklistAdapter;
    @BindView(R.id.btn_add_item)
    Button btnAdd;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);

    }

    private int cont() {
        return valor++;
    }

    public void novoItem(View view) {
        lista = new ArrayList<>();
        lista.add(new Checklist("Item " + (cont() + 1), true));
        loadRecycler(lista);
    }

    private void loadRecycler(List<Checklist> lista) {
        if (listChecklistAdapter == null) {
            Log.i("LOG", "IF");

            listChecklistAdapter = new ListChecklistAdapter(this, lista);

            rvLista.setAdapter(listChecklistAdapter);
            rvLista.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
            rvLista.addItemDecoration(new DividerItemDecoration(this, 1));
            return;
        } else {
            Log.i("LOG", "ELSE");
            listChecklistAdapter.refreshData(lista);
            listChecklistAdapter.onAttachedToRecyclerView(rvLista);
        }
    }
}

活动主

<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="match_parent"
    android:orientation="vertical"
    android:padding="16dp"
    tools:context="teste.com.br.recyclercomcheckbox.MainActivity">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/rcv_lista"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/btn_add_item"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right"
        android:layout_marginTop="5dp"
        android:background="@android:color/transparent"
        android:onClick="novoItem"
        android:paddingLeft="20dp"
        android:paddingRight="20dp"
        android:text="+ novo item"
        android:textColor="#009688" />

</LinearLayout>

只需删除这一行this.mChecklist.clear(); 来自您的refreshData()方法。

public void refreshData(List<Checklist> item) {
    this.mChecklist.addAll(item);
    notifyDataSetChanged();
}

@Nilesh Rathod解决了这个问题! 我刚刚删除了this.mChecklist.clear(); 来自ListCheckAdapter.java > refreshData()感谢大家的帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM