2016-05-08 3 views
0

У меня есть фрагмент с несколькими кнопками, текстовым просмотром и списком.Обновить фрагмент TextView из адаптера ListView

Внутри CustomAdapter у меня есть метод onClick для удаления элемента из списка, когда они нажимают на изображение в пользовательском listview.

Однако эти товары связаны с ценами, и я хочу обновить текстовое представление, которое сидит в верхней части фрагмента, говоря «Всего».

Вот код.

(The по щелчку методом в адаптер ITEMLIST)

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(); 
     } 
    }); 

Функция внутри моего фрагмента имени 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)))); 
} 

Я получаю ошибку, когда я удалить элемент

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) 

Я понимаю, что он говорит, что мое текстовое представление «не существует», но я не уверен, почему, как было объявлено в моем методе onViewCreated в начале фрагмента.

Если anyones ищет полный ответ:

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

Выше было создана в моем методе GetView в адаптере, и ниже был примером того, как он был использован в OnClick также в адаптеры GetView

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

      itemList.resetTotal(); 
     } 
    }); 

ответ

2

это потому, что вы создаете новый экземпляр вашего фрагмента здесь:

ItemList_Fragment itemlist = new ItemList_Fragment();

Вместо этого используйте getFragmentManager().findFragmentByTag(FRAGMENT_TAG) или лучше использовать пользовательский прослушиватель и прослушивать обратные вызовы внутри фрагмента.

+0

Возможно ли, что вы могли бы немного расшириться? У меня возникли проблемы с реализацией его в моем ListAdapter. Извините – Noodelz

+0

Я понял это :) Спасибо, что поставил меня на правильный путь! Ответ выше. – Noodelz