【发布时间】:2016-05-08 22:19:45
【问题描述】:
我目前有一个带有几个按钮、一个文本视图和一个列表视图的片段。
在 CustomAdapter 中,当他们单击自定义列表视图上的图像时,我有一个 onClick 方法可以从列表视图中删除项目。
但是,这些是与价格相关的项目,我想更新位于片段顶部的文本视图,显示“总计”。
这是一些代码。
(ItemList 适配器中的 on Click 方法)
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 方法中声明的。
如果有人在寻找完整的答案:
final Context context = parent.getContext();
final FragmentManager fm = ((Activity) context).getFragmentManager();
final ItemList_Fragment itemList = (ItemList_Fragment)fm.findFragmentByTag("itemsListTag");
上面是在我的适配器内的getView方法中设置的,下面是如何在适配器getView内的onClick中使用它的示例
holder.remove.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
_ItemObject itemToRemove = (_ItemObject) v.getTag();
remove(itemToRemove);
notifyDataSetChanged();
itemList.resetTotal();
}
});
【问题讨论】:
标签: android listview android-fragments