如果我希望我的ViewHolders在RecyclerView中清理内部状态(在这种情况下从EventBus取消注册并清理Rx-Subscriptions),那么该怎么办?我认为方法onViewDetachedFromWindow或onViewRecycled适配器中的方法是我可以清理资源的回调(如API中所述),但是当我从Activity使用RecyclerView另一个更改时,从不调用此方法Activity.
只有onViewAttachedToWindow在输入活动时才会调用,我可以看到我的项目.
我的适配器看起来像这样:
public class Adapter extends RecyclerView.Adapter<MyViewHolder>
{
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return factory.getViewholder(parent, viewType, this);
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
MyItem item = items.get(position);
holder.bind(item);
}
@Override
public void onViewDetachedFromWindow(MyViewHolder holder)
{
holder.viewDetached();
super.onViewDetachedFromWindow(holder);
}
@Override
public void onViewAttachedToWindow(MyViewHolder holder)
{
super.onViewAttachedToWindow(holder);
holder.viewAttached();
}
@Override
public void onViewRecycled(MyViewHolder holder)
{
super.onViewRecycled(holder);
holder.viewRecycled();
}
@Override
public int getItemCount() { …Run Code Online (Sandbox Code Playgroud) 根据Android片段生命周期,我希望在onDestroy重新创建片段之后,或者至少onCreateView再次调用片段.
我有一个活动A开始另一个活动B的结果和活动B创建一个片段F.
public class A extends FragmentActivity {
...
public void onButonClick() {
Intent intent = new Intent(this, B.class);
startActivityForResult(intent, REQUEST_B);
}
}
public class B extends FragmentActivity {
...
public void onCreate(Bundle savedInstanceState) {
...
this.currentFragment = Fragment.instantiate(this, name);
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(this.view.getFragmentContainerId(), this.currentFragment, taskName);
transaction.commit();
}
}
public class F extends Fragment {
@override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
this.view = new MyView();
}
@override
public void onResume() { …Run Code Online (Sandbox Code Playgroud)