0

Was versuche ich zu tun?Kann CoordinatorLayout nicht innerhalb von RecylerAdapter über findViewById erhalten

Ich habe eine RecyclerView, die Zeilen hält und wie ein ListView aussieht. Zeilen dieser Liste sind unter feed_listview_row.xml definiert. Ich habe eine RecyclerAdapter für diese RecyclerView und es heißt Feed_Recycler_Adapter.java, die Sie unten sehen können.

Ich möchte eine AlertDialog zeigen, wenn Benutzer lange auf eine dieser Zeilen geklickt hat. Es gibt eine Frage darüber, ob der Benutzer diese Zeile löschen oder beibehalten möchte. Nach dem Benutzer akzeptieren, um die Zeile zu löschen. Es wird SnackBar geben, um den Benutzer zu benachrichtigen und ihm/ihr eine letzte Chance zu geben, es zurückzunehmen.

Problem

ich die SnackBar nicht sehen kann, weil ich nicht in der Lage bin die CoordinatorLayout zu zeigen.

-Code

Feed_Recycler_Adapter.java

holder.layout.setOnLongClickListener(new View.OnLongClickListener() { 
    @Override 
public boolean onLongClick(View v) { 

    cl = (CoordinatorLayout) v.findViewById(R.id.FeedCoordinatorLayout); 
    /*this row above is failing to fill the cl variable. 
    This cl variable returns null! I need to get the coordinatorlayout for snackbar*/ 
    String selectedListId = mDataset.get(position).getListId(); 
    String selectedPostId = mDataset.get(position).getPostId(); 
    Push_Options.ownerOrfollower(v.getContext(), selectedListId, selectedPostId, cl); 
       return true; 
        } 
       }); 

Ich versuchte

Ich versuchte, die content_feed am Feed_Recycler_Adapter.ViewHolder onCreateViewHolder aufzublasen und als Ansicht mit zu bekomme FeedCoordinatorLayout, habe das Problem nicht gelöst, aber ich habe keinen Fehler bekommen oder einfach weil cl nicht null war. Aber zeigte weder die SnackBar.

Antwort

0

Ich fand die Lösung mit ein bisschen Hilfe von Dariush fs Antwort.

Ich änderte meinen vorhandenen Konstruktor, um ein CoordinatorLayout-Feld zu haben.

Und ich sende das Koordinatorlayout, wenn ich diesen Adapter instanziiere. Wie folgt aus:

CoordinatorLayout cl = (CoordinatorLayout) findViewById(R.id.FeedCoordinatorLayout) ; 
mAdapter = new Feed_Recycler_Adapter(posts,cl); 

Da meine onLongClick Methode bereits in meiner Adapter Klasse ist, kann ich eine Snackbar mit meiner cl Variable erstellen, die von meinem Konstruktor gesetzt.

Push_Options.ownerOrfollower(v.getContext(), selectedListId, selectedPostId, cl); 
0

Ich las einen Teil Ihrer großen Frage und feststellen, dass Sie zu RootView (coordinatorLayout) benötigen
diese Ihnen vielleicht helfen:
hinzufügen Konstruktor YourAdapter mit Context param:

public yourAdapter(Context activity){ 
    context = activity // context is local object 
} 

jetzt in Ihrer Tätigkeit wo Sie eine Instanz von YourAdapter tun dies schaffen:

adapter = new YourAdapter(YourActivity.this); 

und wenn Sie snakBar zeigen wollen:

Snackbar.make(((YourActivity) context).coordinatorLayout, "Post deleted.", Snackbar.LENGTH_LONG).show() 

sicher zu definieren coordinatorLayout in YourActivity Klasse.

Verwandte Themen