Ich versuche, durch Erstellen einer benutzerdefinierten recyclerview Klasse mit einem AdapterDataObserver ein setEmptyView Verfahren zu implementieren, wie einige User hier beschrieben:recyclerview setEmptyView Implementierung - android
Equivalent of ListView.setEmptyView in RecyclerView
Das Problem ist, es funktioniert ist nicht für mich . Wenn die Liste voller Daten ist, kann ich die Listenelemente perfekt sehen, aber wenn die Liste leer ist, kann ich meine leere Ansicht nicht sehen.
Hier ist meine Gewohnheit recyclerview:
package bikurim.silverfix.com.bikurim.utils.general;
import android.content.Context;
import android.support.annotation.Nullable;
import android.support.v7.widget.RecyclerView;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
/**
* Created by David on 16/07/2016.
*
* A custom implementation of the RecyclerView class for supporting setEmptyView() method
*
* @author David Lasry
*/
public class FamilyRecyclerView extends RecyclerView {
private View emptyView;
private AdapterDataObserver emptyObserver = new AdapterDataObserver() {
@Override
public void onItemRangeChanged(int positionStart, int itemCount) {
checkIfEmpty();
}
@Override
public void onItemRangeChanged(int positionStart, int itemCount, Object payload) {
checkIfEmpty();
}
@Override
public void onItemRangeInserted(int positionStart, int itemCount) {
checkIfEmpty();
}
@Override
public void onItemRangeRemoved(int positionStart, int itemCount) {
checkIfEmpty();
}
@Override
public void onChanged() {
checkIfEmpty();
}
};
public FamilyRecyclerView(Context context) {
super(context);
}
public FamilyRecyclerView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public FamilyRecyclerView(Context context, @Nullable AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public void setAdapter(Adapter adapter) {
super.setAdapter(adapter);
if(adapter != null) {
adapter.registerAdapterDataObserver(emptyObserver);
}
checkIfEmpty();
}
public void setEmptyView(View emptyView) {
this.emptyView = emptyView;
}
private void checkIfEmpty() {
if(emptyView != null && getAdapter() != null) {
final boolean isEmpty = getAdapter().getItemCount() == 0;
emptyView.setVisibility(isEmpty ? VISIBLE : GONE);
setVisibility(isEmpty ? GONE : VISIBLE);
}
}
}
Und hier ist der Teil meiner Arbeit auf, wo ich eine Ansicht von Layout Ressource aufblasen und legen Sie es meine leer sein:
FamilyRecyclerView recyclerView = (FamilyRecyclerView) findViewById(R.id.rv);
View emptyView = getLayoutInflater().inflate(R.layout.empty_layout, null);
recyclerView.setEmptyView(emptyView);
I debuggte es ein wenig und leerenView ist nicht null, was bedeutet, dass die Inflation erfolgreich ist.
Was ist das Problem hier?
Vielen Dank für Ihre Antwort! Ich habe mich schließlich dazu entschlossen, die leere Ansicht einfach in mein XML-Layout zu legen und den Verweis darauf in meiner Aktivität für Animationszwecke zu erhalten. –
Freut mich zu hören, Sie haben es behoben! das ist auch ein gültiger Ansatz. –