【问题标题】:Update TextView in fragment's parent Activity更新片段父 Activity 中的 TextView
【发布时间】:2016-04-28 01:48:45
【问题描述】:

我只需要从它的子片段修改父的 TextView。该活动实际上仍然显示在片段旁边,所以我认为我应该能够从片段中修改它,但到目前为止,我已经尝试过所有的 NPE。我看到一些关于从其父级更新片段的帖子,但我需要做相反的事情,而这些功能到目前为止还没有工作。

我已将此方法放在我的 MainActivity(父级)中,以允许从片段更新 TextView。

 public void updateGoldTextView(int goldAmount) {
    goldTV.setText(String.valueOf(goldAmount));
}

在我的片段中,我这样调用方法:

MainActivity mainActivity = new MainActivity();
mainActivity.updateGoldTextView(50);

我需要在片段中做什么才能正确引用它?

【问题讨论】:

  • 你是如何尝试从你的代码中调用这个方法的?
  • 哦,对不起,我是想发这个的。将在 2 秒后更新!
  • 但是当我尝试设置文本时,NPE 来自我的 MainActivity。好像我不再有权访问该 TextView(即使它当前仍在显示)

标签: android android-fragments android-activity textview


【解决方案1】:

您调用的方法错误!在您的片段中尝试以下操作。

((MainActivity) getActivity()).updateGoldTextView(50);

要了解其工作原理,Android 中的每个Activity 都是用户看到的屏幕。您的 MainActivity 托管该片段。要从您的片段访问父活动,您应该使用getActivity() 方法。

【讨论】:

  • 你说得对。所以你得到了被转换为 (MainActivity) 的活动?
  • 检查我更新的答案。基本上是为了获取您应该使用getActivity() 的父活动,而不是创建您当前正在执行的MainActivity 的新实例!
  • 事实上,你永远不应该像之前那样创建Activity 的实例。
  • 此方法应该在您想要引用活动的值或方法的任何时候使用?永远不要像我一样创建实例?
  • 是的。你永远不应该那样做!因为在 Android 中,每个Activity 只不过是用户可见的屏幕。您使用意图从一项活动转到另一项活动。您不会像创建的那样创建活动实例。
【解决方案2】:

但是将数据从片段传递到活动的最佳做法是您应该使用接口。这样您在任何时候都不会得到 NPE。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-09
    • 1970-01-01
    相关资源
    最近更新 更多