从ListView适配器更新片段TextView

时间:2016-05-08 22:19:45

标签: android listview android-fragments

我目前有一个带有几个按钮,textview和listview的片段。

在CustomAdapter中,我有一个onClick方法,当他们点击自定义列表视图上的图像时,从列表视图中删除该项。

但是,这些是与价格相关联的项目,我想更新位于片段顶部的文本视图,说“总计”。

这是一些代码。

(ItemList适配器中的on Click方法)

<input type="text" id="q" />
<input type="button" id="submit" value="submit" />

<script>
$(function () {
$("#submit").submit(function() {
    var url = "/tag/";
    url += $("#q").val();
    window.location = url;
});
});
</script>

我的片段中名为ItemList_Fragment

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

我删除商品时收到的错误

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

我理解它说我的textview“还不存在”,但我不确定为什么它在片段开头的onViewCreated方法中声明了。

如果有人寻找完整答案:

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)

以上是在适配器中的getView方法中设置的,以下是在适配器getView中的onClick中如何使用它的示例

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

1 个答案:

答案 0 :(得分:2)

这是因为你在这里创建片段的新实例:

ItemList_Fragment itemlist = new ItemList_Fragment();

改为使用getFragmentManager().findFragmentByTag(FRAGMENT_TAG) 或者更好地使用自定义监听器并监听片段内的回调。