Android无尽的RecyclerView,最后一行用于添加新项目

时间:2016-06-28 20:21:41

标签: android android-recyclerview

我想通过Google Keep创建类似的内容。

Keep的屏幕截图:

https://s31.postimg.org/o4wpmxj0b/photo_2016_06_28_22_05_18.jpg https://s31.postimg.org/6tngsmtrf/photo_2016_06_28_22_05_25.jpg

我已经创建了一个RecyclerView及其Adapter / ViewHolder,其中包含一个包含TextView和Checkbox的项目列表。

我真的想得到最后一个空项目,以便向循环器视图添加无穷无尽的新项目。

我想到了这一点,我最终得到的唯一想法就是在结束后手动添加RecyclerView的行OUT,并使其看起来与其项目完全相同。

但当然,它似乎并不是一件好事。有没有其他方法可以做到这一点?

以下是我的代码,我使用的是Firebase适配器,因为我需要在线同步数据,但我认为不存在差异。

 private void initTaskList() {
    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
    recyclerView.setHasFixedSize(true);

    subjectAdapter = new FirebaseRecyclerAdapter<String,TaskHolder>
            (String.class, R.layout.item_checkbox_text, TaskHolder.class, FirebaseUser.getTasksRef(eventID)) {
        @Override
        protected void populateViewHolder(TaskHolder viewHolder, String taskInfo, int position) {
            viewHolder.taskText.setText(taskInfo);
        }
    };
    recyclerView.setAdapter(subjectAdapter);
}

static class TaskHolder extends RecyclerView.ViewHolder {
    private TextView taskText;
    private CheckBox taskCheckbox;

    public TaskHolder(View itemView) {
        super(itemView);
        taskText = (TextView)itemView.findViewById(R.id.task_text);
        taskCheckbox = (CheckBox)itemView.findViewById(R.id.task_checkbox);
    }

}

2 个答案:

答案 0 :(得分:0)

我不记得我头顶的确切位置,但我认为在你定义更大的R.layout.item_checkbox_text的xml中,你可以添加所需的&#39; last&#39 ;使用自己的xml标记在recyclerview之后或之内排。您可以将其设置为recyclerview之外的单独元素,也可以作为一行。由于您在ViewHolder中定义了列表的行将映射到R.id.task_text和R.id.task_checkbox,因此您应该能够将其放在最后而不会多次显示。

编辑:举个例子,这里有相同的概念,但有一个列表视图的标题:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <include layout="@layout/msgqueue_header"
        android:id="@+id/include" />

    <ListView android:id="@id/android:list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:drawSelectorOnTop="false"

        android:fadeScrollbars="false"/>

</LinearLayout>

如果我将其包含在ListView之后但在同一个LinearLayout中,则它将作为页脚使用。

然后,更棘手的部分将定义最后一行的点击行为,以便将新数据正确添加到适配器并重新填充视图。如果正确调用notifyDatasetchanged(),假设您可以访问附加到存储任务信息的适配器的基础数据集,则可能相对简单。

答案 1 :(得分:0)

我相信你所需要的只是一个带有页脚的recyclerView.Here是一个库,可以帮助你将页脚添加到endlessRecyclerView https://github.com/willblaschko/header-footer-recycler-view

此库允许您向recyclerView添加许多页眉和页脚。

现在创建一个页脚布局(它可以是任何类型的视图,如edittext或进度条)

<ListView android:id="@id/android:list"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="1"/>

 <-----Your Footer view defined here---->

现在通过它的id找到footerView并为它设置一个onclickListener()并通过

将它作为页脚添加到recyclerView中
 mAdapter.addFooter(FooterView)

您可以在稍后阶段通过

删除它
mAdapter.removeFooter(FooterView);

希望它有所帮助。