在适配器上调用notifyItemRemoved(position)
时出现问题。每当我提供的位置不是最后一个元素,并且当移除动画发生时,最后一个元素将始终首先“闪烁/闪烁”,然后向上移动,如下面的屏幕截图(链接)所示。
以下是我的代码的一小部分:
MainActivity.java
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// ...
RecylerView recyclerView = (RecyclerView) findViewById(R.id.list_view);
recyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(new ItemAdapter());
}
ItemAdapter.java
public void onBindViewHolder(final ViewHolder holder, int position) {
holder.mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// mItems has a list of hard-coded elements
mItems.remove(holder.getAdapterPosition());
notifyItemRemoved(holder.getAdapterPosition());
}
});
}
content_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.myapp.myapplication.MainActivity"
tools:showIn="@layout/activity_main">
<android.support.v7.widget.RecyclerView
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scrollbars="vertical">
</android.support.v7.widget.RecyclerView>
</android.support.constraint.ConstraintLayout>
list_item.xml
<?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="wrap_content">
<Button
android:id="@+id/btn_click"
android:text="Delete"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
有没有人经历过这个以及如何解决这个问题?
提前致谢。
答案 0 :(得分:0)
如果您不想要任何动画,可以添加此行
((DefaultItemAnimator) recyclerViewObject.getItemAnimator()).setSupportsChangeAnimations(false);
答案 1 :(得分:0)
将此添加到您的代码中。
recyclerView.getItemAnimator().setChangeDuration(0);
答案 2 :(得分:0)
尝试将“回收者”视图的高度更改为match_parent