2016-05-08 14 views
0

Ich habe derzeit ein Fragment mit ein paar Schaltflächen, eine Textansicht und eine Listenansicht.Update Fragment TextView von ListView Adapter

Innerhalb des CustomAdapter habe ich eine onClick-Methode, um das Element aus der Listview zu entfernen, wenn sie auf ein Bild in der benutzerdefinierten Listenansicht klicken.

Allerdings sind diese Elemente mit Preisen verbunden, und ich möchte eine Textansicht aktualisieren, die an der Spitze des Fragments sitzt und sagt "Total".

Hier ist ein Code.

(Die auf Click-Methode im ItemList Adapter)

holder.remove.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      _ItemObject itemToRemove = (_ItemObject) v.getTag(); 
      remove(itemToRemove); 
      notifyDataSetChanged(); 

      ItemList_Fragment itemlist = new ItemList_Fragment(); 
      itemlist.resetTotal(); 
     } 
    }); 

Die Funktion in meinem Fragment namens ItemList_Fragment

public void resetTotal() { 
    total = 0; 
    for (int i = 0; i < objects.size(); i++) { 
     total = total + (objects.get(i).getItemPrice() * objects.get(i).getItemQuantity()); 
    } 
    quoteTotal.setText("$" + String.valueOf(String.format("%.2f", total + (total * 0.15)))); 
} 

Die Störung, die ich erhalte, wenn ich entfernen Sie ein Element

05-09 10:15:54.172 5171-5171/quotenowv2 E/AndroidRuntime: FATAL EXCEPTION: main 
                        Process: quotenowv2, PID: 5171 
                        java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference 
                         at quotenowv2.ItemList_Fragment.resetTotal(ItemList_Fragment.java:242) 
                         at quotenowv2._ItemListAdapter$1.onClick(_ItemListAdapter.java:81) 
                         at android.view.View.performClick(View.java:5204) 
                         at android.view.View$PerformClick.run(View.java:21153) 
                         at android.os.Handler.handleCallback(Handler.java:739) 
                         at android.os.Handler.dispatchMessage(Handler.java:95) 
                         at android.os.Looper.loop(Looper.java:148) 
                         at android.app.ActivityThread.main(ActivityThread.java:5417) 
                         at java.lang.reflect.Method.invoke(Native Method) 
                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

Ich verstehe, dass es meine Textansicht "noch nicht existiert", aber ich bin mir nicht sicher, warum es in meiner onViewCreated-Methode am Anfang des Fragments deklariert wurde.

Wenn anyones für die vollständige Antwort suchen:

final Context context = parent.getContext(); 
final FragmentManager fm = ((Activity) context).getFragmentManager(); 
final ItemList_Fragment itemList = (ItemList_Fragment)fm.findFragmentByTag("itemsListTag"); 

Die oben in meinem getView Verfahren innerhalb des Adapters einzurichten, und die unten war ein Beispiel dafür, wie es auch in der onClick verwendet wurde innerhalb von die Adapter GetView

holder.remove.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      _ItemObject itemToRemove = (_ItemObject) v.getTag(); 
      remove(itemToRemove); 
      notifyDataSetChanged(); 

      itemList.resetTotal(); 
     } 
    }); 

Antwort

2

das ist, weil Sie neue Instanz des Fragments schaffen hier:

ItemList_Fragment itemlist = new ItemList_Fragment();

Verwenden Sie stattdessen getFragmentManager().findFragmentByTag(FRAGMENT_TAG) oder besser verwenden Sie benutzerdefinierte Listener und warten auf Rückrufe innerhalb Fragment.

+0

Ist es möglich, dass Sie dies leicht erweitern könnten? Ich habe Probleme, es in meinen ListAdapter zu implementieren. Sorry – Noodelz

+0

Ich habe es herausgefunden :) Danke, dass du mich auf den richtigen Weg gebracht hast! Die Antwort ist oben. – Noodelz

Verwandte Themen