Android - RecyclerView:添加新项目并选择它

时间:2017-01-13 15:35:14

标签: android android-fragments android-recyclerview

我在片段中有一个RecyclerView,这些项目是可选的。我通过在RvAdapter中创建变量int focusedItem = 0;并在onBindViewHolder方法中创建holder.itemView.setSelected(focusedItem == position);来解决这个问题。这是项目的onClick方法:

holder.itemView.setOnClickListener(new View.OnClickListener(){

    @Override
    public void onClick(View v) {
        notifyItemChanged(focusedItem);
        focusedItem = position;
        notifyItemChanged(focusedItem);
    }
});

在列表项的XML文件中,我使用了一个选择器作为背景,它改变了所选项目的背景颜色。这工作正常,但我想在回收商视图中添加项目,在添加项目后,它再也没有那么好了。

这就是我将一个项添加到rv(在fragment类中):

entries.add(0, new ...);
rvAdapter.notifyItemInserted(0);
recyclerView.scrollToPosition(0);

所以我在第一个位置向ArrayList添加一个项目。然后我通知适配器,插入第一个位置的新项目,然后滚动到该新项目。现在我希望自动选择新项目。有没有办法做到这一点?我的想法是设置focusedItem = 0,但我不知道如何在片段类中编辑这个值。或者是否有类似onItemInserted的东西,我可以将此变量设置为0?

2 个答案:

答案 0 :(得分:2)

在调用notify..之前将focusedItem设置为0. onBindViewHolder稍后会被调用,导致项目显示为已选中。

entries.add(0, new ...);
focusedItem = 0;
rvAdapter.notifyItemInserted(0);
recyclerView.scrollToPosition(0);

编辑:

所以你在focusedItem而不是Fragment中定义了Adapter?最好将其移至Adapter并添加getter / setter方法。

答案 1 :(得分:0)

@Roman Kolomenskii有想法将focusedItem变量放在片段类中,而不是放在RvAdapter类中。这是一个好主意和它的工作。

所以在我的Fragment类中我有public static int focusedItem = 0;,这是添加项目时的代码:

int oldFocusedItem = focusedItem;
focusedItem = 0;
rvAdapter.notifyItemInserted(0);
rvAdapter.notifyItemChanged(oldFocusedItem+1);
recyclerView.scrollToPosition(0);

我必须存储最新的selectedItem,因为我必须通知适配器,此项目+ 1(因为之前有新项目)已更改,因为它必须松开选择。然后我将focusedItem设置为0.在RvAdapter类中,我使用MyFragment.focusedItem来获取所选项目。