2017-07-23 1 views
2

J'essaie de définir un TextView comme une vue vide si mon recyclerView ne se charge pas et que je ne peux pas faire fonctionner setEmptyView. Il dit ne peut pas résoudre la méthode setEmptyView. Voici le code:Impossible de résoudre la méthode setEmptyView

RecyclerView recyclerViewUser1 = (RecyclerView) rootView.findViewById(R.id.recycler_view_red_room1); 
    emptyStateTextView = (TextView) rootView.findViewById(R.id.empty_view); 
    recyclerViewUser1.setEmptyView(emptyStateTextView); 

Je suis dans un fragment, est-ce possible?

+0

'setEmptyView' est utilisé par' AdapterView', pas 'RecyclerView' – pskink

+0

s'il vous plaît mettre votre code xml de la vue recycleur – UmarZaii

Répondre

3

RecyclerView ne prend pas en charge setEmptyView. Peut utiliser cette classe.

public class RecyclerViewEmptyView extends RecyclerView { 
    private View emptyView; 

    private AdapterDataObserver emptyObserver = new AdapterDataObserver() { 


     @Override 
     public void onChanged() { 
      Adapter<?> adapter = getAdapter(); 
      if(adapter != null && emptyView != null) { 
       if(adapter.getItemCount() == 0) { 
        emptyView.setVisibility(View.VISIBLE); 
        RecyclerViewEmptySupport.this.setVisibility(View.GONE); 
       } 
       else { 
        emptyView.setVisibility(View.GONE); 
        RecyclerViewEmptySupport.this.setVisibility(View.VISIBLE); 
       } 
      } 

     } 
    }; 

    public RecyclerViewEmptySupport(Context context) { 
     super(context); 
    } 

    public RecyclerViewEmptySupport(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public RecyclerViewEmptySupport(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    @Override 
    public void setAdapter(Adapter adapter) { 
     super.setAdapter(adapter); 

     if(adapter != null) { 
      adapter.registerAdapterDataObserver(emptyObserver); 
     } 

     emptyObserver.onChanged(); 
    } 

    public void setEmptyView(View emptyView) { 
     this.emptyView = emptyView; 
    } 
} 

Ou vous pouvez

<android.support.v7.widget.RecyclerView 
    android:id="@+id/recycler_view" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:scrollbars="vertical" /> 

<TextView 
    android:id="@+id/empty_view" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:gravity="center" 
    android:visibility="gone" 
    android:text="No Data Available" /> 

code Java:

private RecyclerView recyclerView; 
private TextView emptyView; 

// ... 

recyclerView = (RecyclerView) rootView.findViewById(R.id.recycler_view); 
emptyView = (TextView) rootView.findViewById(R.id.empty_view); 

// ... 

if (dataset.isEmpty()) { 
    recyclerView.setVisibility(View.GONE); 
    emptyView.setVisibility(View.VISIBLE); 
} 
else { 
    recyclerView.setVisibility(View.VISIBLE); 
    emptyView.setVisibility(View.GONE); 
} 
+0

Merci, ça fonctionne! –

3

d'abord tout ce que vous devez définir votre emptyView en XML à android:visibility="gone". Deuxièmement, vous devez définir la visibilité de recyclerview sur gone si l'ensemble de données que vous avez récupéré est vide.

private RecyclerView recyclerViewUser1 ; 
private TextView emptyStateTextView ; 

// ... 

recyclerViewUser1 = (RecyclerView) rootView.findViewById(R.id.recycler_view_red_room1); 
emptyStateTextView = (TextView) rootView.findViewById(R.id.empty_view); 

// ... 

if (dataset.isEmpty()) { 
    recyclerViewUser1 .setVisibility(View.GONE); 
    emptyStateTextView .setVisibility(View.VISIBLE); 
} 
else { 
    recyclerViewUser1 .setVisibility(View.VISIBLE); 
    emptyStateTextView .setVisibility(View.GONE); 
}