问题
每次我在持有者中调用OnBind()方法时,其中的视图都会闪烁或闪烁,甚至可能会消失。
我很遗憾为什么,我已经尝试了很多东西。
思考
我一直认为我最终会尝试用动画和样式隐藏它。将其视为绑定的副作用。
显然,这是一个大项目的一部分。所以我仍然需要做所有的动画,这就是为什么我还没有做到这一点。我想问一下,看看是否有人可以在此期间以另一种方式帮助找到解决方案。
任何帮助,提示或建议都会很棒。希望代码链接起作用并且能够为每个人构建。
谢谢,
乔恩。
代码
我不确定我需要在这里添加多少代码,所以我一开始会变小。如果有更多应该添加,请告诉我,我会。不过我把它全部放在Github和Dropbox上(例如Apk& Zip) 链接位于底部。
HeaderHolder.java
public class HeaderHolder extends BaseHolder {
@Bind(R.id.header_title_text)
TextView _titleTextView;
@Bind(R.id.header_status_image)
ImageView _statusImageView;
@BindDrawable(R.drawable.ic_selected)
Drawable _statusSelected;
@BindDrawable(R.drawable.ic_non_selected)
Drawable _statusNonselected;
private Header _header;
public HeaderHolder(View root, HolderCallBacks callbacks) {
super(null, root, callbacks);
}
@Override
public void OnBind(Base model) {
this._header = (Header) model;
String n = model._name();
this._titleTextView.setText(n);
this._statusImageView.setImageDrawable(this._header._iconset()._selected()
? this._statusSelected : this._statusNonselected);
}
@OnClick(R.id.header_item_wrapper)
public void _headerClick(View view) {
this._callbacks.OnHolderClick(view, this._header);
}
}
IconsetHolder.java
public class IconsetHolder extends BaseHolder {
@Bind(R.id.iconset_icon_recycler)
RecyclerView _iconsRecycler;
private AdapterCallBacks _adapterCallbacks;
public IconsetHolder(Context context, View root, AdapterCallBacks callbacks) {
super(context, root, null);
this._adapterCallbacks = callbacks;
}
@Override
public void OnBind(Base model) {
Iconset i = (Iconset) model;
this._iconsRecycler.setLayoutManager(new GridLayoutManager(
this._context, i._span(), GridLayoutManager.HORIZONTAL, false));
this._iconsRecycler.setAdapter(new ModelsAdapter(i._icons(), this._adapterCallbacks));
}
}
item_header.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/header_item_wrapper"
android:layout_width="wrap_content"
android:layout_height="56dip"
android:background="#595959"
tools:context=".views.adapters.holders.HeaderHolder">
<TextView
android:id="@+id/header_title_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="16dp"
android:textColor="#fff8f8f8"
android:gravity="center_vertical"
android:text="ICONSET"
android:textSize="24sp"
android:layout_centerVertical="true" />
<ImageView
android:id="@+id/header_status_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="12dp"
android:gravity="center_vertical"
android:layout_alignParentRight="true"
android:layout_centerVertical="true" />
</RelativeLayout>
item_iconset.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/iconset_item_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@null"
tools:context=".views.adapters.holders.IconsetHolder">
<android.support.v7.widget.RecyclerView
android:id="@+id/iconset_icon_recycler"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clipToPadding="false"
android:background="#595959"
android:layout_marginBottom="16dp"
/>
</RelativeLayout>
已删除示例链接
答案 0 :(得分:0)
RecyclerView
使用DefaultItemAnimator为其制作了一些内置动画。特别是当您致电notifiyItemChanged()
时,它会为ViewHolder
中的数据更改执行淡入淡出动画。如果您想禁用此功能,可以使用以下内容:
RecyclerView.ItemAnimator animator = recyclerView.getItemAnimator(); // your recycler view here
if (animator instanceof DefaultItemAnimator) {
((DefaultItemAnimator) animator).setSupportsChangeAnimations(false);
}
这将禁用项目更改动画(您看到的淡入淡出)。