小编Dok*_*ans的帖子

从未调用过RecyclerView.Adapter onViewDetachedFromWindow

如果我希望我的ViewHolders在RecyclerView中清理内部状态(在这种情况下从EventBus取消注册并清理Rx-Subscriptions),那么该怎么办?我认为方法onViewDetachedFromWindowonViewRecycled适配器中的方法是我可以清理资源的回调(如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 adapter android-recyclerview

6
推荐指数
1
解决办法
6667
查看次数

在onDestroy之后再次调用Android片段onCreateView

根据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)

lifecycle android fragment ondestroy

5
推荐指数
1
解决办法
1824
查看次数