【问题标题】:Update fragment TextView from ListView Adapter从 ListView 适配器更新片段 TextView
【发布时间】: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


    【解决方案1】:

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

    ItemList_Fragment itemlist = new ItemList_Fragment();

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

    【讨论】:

    • 你可以稍微扩展一下吗?我无法将它实施到我的 ListAdapter 中。对不起
    • 我已经弄清楚了 :) 感谢您让我走上正轨!答案在上面。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多