Fixed popup menu lifecycle

pull/162/head
M66B 6 years ago
parent e6d3999a4e
commit fade38f07d

@ -418,7 +418,7 @@ public class AdapterAccount extends RecyclerView.Adapter<AdapterAccount.ViewHold
} }
@Override @Override
public void onViewRecycled(@NonNull ViewHolder holder) { public void onViewDetachedFromWindow(@NonNull ViewHolder holder) {
holder.powner.recreate(); holder.powner.recreate();
} }
} }

@ -307,7 +307,7 @@ public class AdapterAnswer extends RecyclerView.Adapter<AdapterAnswer.ViewHolder
} }
@Override @Override
public void onViewRecycled(@NonNull ViewHolder holder) { public void onViewDetachedFromWindow(@NonNull ViewHolder holder) {
holder.powner.recreate(); holder.powner.recreate();
} }
} }

@ -421,7 +421,7 @@ public class AdapterContact extends RecyclerView.Adapter<AdapterContact.ViewHold
} }
@Override @Override
public void onViewRecycled(@NonNull ViewHolder holder) { public void onViewDetachedFromWindow(@NonNull ViewHolder holder) {
holder.powner.recreate(); holder.powner.recreate();
} }
} }

@ -904,11 +904,6 @@ public class AdapterFolder extends RecyclerView.Adapter<AdapterFolder.ViewHolder
return new ViewHolder(inflater.inflate(viewType, parent, false)); return new ViewHolder(inflater.inflate(viewType, parent, false));
} }
@Override
public void onViewRecycled(@NonNull ViewHolder holder) {
holder.powner.recreate();
}
@Override @Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) { public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
holder.unwire(); holder.unwire();
@ -919,6 +914,11 @@ public class AdapterFolder extends RecyclerView.Adapter<AdapterFolder.ViewHolder
holder.wire(); holder.wire();
} }
@Override
public void onViewDetachedFromWindow(@NonNull ViewHolder holder) {
holder.powner.recreate();
}
interface IFolderSelectedListener { interface IFolderSelectedListener {
void onFolderSelected(TupleFolderEx folder); void onFolderSelected(TupleFolderEx folder);
} }

@ -350,7 +350,7 @@ public class AdapterIdentity extends RecyclerView.Adapter<AdapterIdentity.ViewHo
} }
@Override @Override
public void onViewRecycled(@NonNull ViewHolder holder) { public void onViewDetachedFromWindow(@NonNull ViewHolder holder) {
holder.powner.recreate(); holder.powner.recreate();
} }
} }

@ -3570,7 +3570,7 @@ public class AdapterMessage extends RecyclerView.Adapter<AdapterMessage.ViewHold
} }
@Override @Override
public void onViewRecycled(@NonNull ViewHolder holder) { public void onViewDetachedFromWindow(@NonNull ViewHolder holder) {
holder.cowner.stop(); holder.cowner.stop();
holder.powner.recreate(); holder.powner.recreate();
} }

@ -332,11 +332,6 @@ public class AdapterOperation extends RecyclerView.Adapter<AdapterOperation.View
return new ViewHolder(inflater.inflate(R.layout.item_operation, parent, false)); return new ViewHolder(inflater.inflate(R.layout.item_operation, parent, false));
} }
@Override
public void onViewRecycled(@NonNull ViewHolder holder) {
holder.powner.recreate();
}
@Override @Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) { public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
holder.unwire(); holder.unwire();
@ -346,4 +341,9 @@ public class AdapterOperation extends RecyclerView.Adapter<AdapterOperation.View
holder.wire(); holder.wire();
} }
@Override
public void onViewDetachedFromWindow(@NonNull ViewHolder holder) {
holder.powner.recreate();
}
} }

@ -428,7 +428,7 @@ public class AdapterRule extends RecyclerView.Adapter<AdapterRule.ViewHolder> {
} }
@Override @Override
public void onViewRecycled(@NonNull ViewHolder holder) { public void onViewDetachedFromWindow(@NonNull ViewHolder holder) {
holder.powner.recreate(); holder.powner.recreate();
} }
} }

@ -30,24 +30,12 @@ import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.OnLifecycleEvent; import androidx.lifecycle.OnLifecycleEvent;
public class PopupMenuLifecycle extends PopupMenu implements LifecycleObserver { public class PopupMenuLifecycle extends PopupMenu implements LifecycleObserver {
private LifecycleOwner owner;
public PopupMenuLifecycle(@NonNull Context context, LifecycleOwner owner, @NonNull View anchor) { public PopupMenuLifecycle(@NonNull Context context, LifecycleOwner owner, @NonNull View anchor) {
super(context, anchor); super(context, anchor);
this.owner = owner;
Log.i("Instantiate " + this); Log.i("Instantiate " + this);
anchor.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() { owner.getLifecycle().addObserver(this);
@Override
public void onViewAttachedToWindow(View v) {
// Do nothing
}
@Override
public void onViewDetachedFromWindow(View v) {
PopupMenuLifecycle.this.dismiss();
}
});
} }
@Override @Override
@ -64,6 +52,5 @@ public class PopupMenuLifecycle extends PopupMenu implements LifecycleObserver {
public void onDestroy() { public void onDestroy() {
Log.i("Destroy " + this); Log.i("Destroy " + this);
this.dismiss(); this.dismiss();
owner = null;
} }
} }

Loading…
Cancel
Save