0

Dies ist ein wirklich bizarrer Bug, dem ich begegne.Snackbar verhindert, dass Recyclerview seine Ansicht aktualisiert?

Wenn ich meinen Code wie folgt (das Hinzufügen eines neuen Element in mein recyclerview) laufen, es funktioniert und Updates fein:

mListOfData.add(someNewItem); 
mRecyclerViewAdapter = new RecyclerViewAdapter(this, mListOfData); 
mRecyclerViewAdapter.notifyDataSetChanged(); 
mRecyclerView.setAdapter(mRecyclerViewAdapter); 

Aber wenn ich zeigen eine Snackbar erklärt dem Benutzer, ein Element hinzugefügt wurde, plötzlich die Liste nicht aktualisiert in Echtzeit, wenn ich die Aktivität (Drehen des Bildschirms usw.) neu:

View view = findViewById(R.id.primary_coordinator_layout); 
mListOfData.add(someNewItem); 
mRecyclerViewAdapter = new RecyclerViewAdapter(this, mListOfData); 
mRecyclerViewAdapter.notifyDataSetChanged(); 
mRecyclerView.setAdapter(mRecyclerViewAdapter); 
Snackbar.make(view, "Item added!", Snackbar.LENGTH_SHORT).show(); 

Gibt es Gründe, warum dies auch sein mag oder wie man verhindern, dass es die Blockierung der visuellen Update? Hier

ist die XML:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <include 
     layout="@layout/toolbar_layout" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"/> 


    <android.support.design.widget.CoordinatorLayout 
     android:id="@+id/primary_coordinator_layout" 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <LinearLayout 
      android:orientation="vertical" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:padding="10dp"> 

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

      <TextView 
       android:id="@+id/emptytext" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:visibility="gone" 
       android:text="@string/no_items_in_recyclerview" 
       android:layout_gravity="center_horizontal" 
       android:gravity="center"/> 
     </LinearLayout> 

     <android.support.design.widget.FloatingActionButton 
      android:id="@+id/fab" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="bottom|end" 
      android:layout_margin="@dimen/fab_margin" 
      android:src="@android:drawable/ic_input_add"/> 

    </android.support.design.widget.CoordinatorLayout> 

</LinearLayout> 

Antwort

1

versuchen, die snackbar später zu entlassen:

final RecyclerViewAdapter mRecyclerViewAdapter2 = new RecyclerViewAdapter(this, mListOfData); 


//create local snackbar 
final Snackbar snackBar = Snackbar.make(view, "Item added!", Snackbar.LENGTH_SHORT); 

snackBar.setAction("Blah blah", new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     mRecyclerView.setAdapter(mRecyclerViewAdapter2); 
     mRecyclerViewAdapter2.notifyDataSetChanged(); 
     snackBar.dismiss(); 
    } 
}); 
snackBar.show(); 
+0

Das gleiche Problem leider –

+0

können Sie versuchen, die aktualisierte Antwort? –

+0

Ich habe den Grund herausgefunden, hatte nichts mit der Snackbar zu tun (hatte damit zu tun, dass die Sichtbarkeit der leeren Ansicht nicht richtig eingestellt war), aber ich gebe ein Häkchen/eine Empfehlung für die Zeit und Mühe –