gpt4 book ai didi

java - 设置textView时Fragment中的NPE

转载 作者:行者123 更新时间:2023-12-02 11:34:27 25 4
gpt4 key购买 nike

我有主机 MainActivity 和 2 个 fragment :MainFragmentStringsFragment

我想在 StringsFragment 中的 TextView(位于 MainFragment 中)中设置文本。

所以在StringsFragment中我有:

public interface OnFragmentInteractionListener {
void messengeFromBroadcastFragment(String value);
}

public void onClick(View view) {
String myValue = "helloWorld";
mListener.messengeFromBroadcastFragment(myValue);
}

在MainFragment中:

TextView tv;

public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_main, container, false);
tv = view.findViewById(R.id.tv);
return view;
}

public void setTextView(String value){
tv.setText(value);
}

和主要 Activity :

public void messengeFromBroadcastFragment(String value) {
mainFragment = new MainFragment();
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.fragmentContainer, mainFragment);
transaction.addToBackStack(null);
transaction.commit();
mainFragment.setTextView(value);
}

当我从 StringsFragment 调用 onClick 时,我得到了空指针:

setText(java.lang.CharSequence)' on a null object reference

从这里开始

public void setTextView(String value){
tv.setText(value);
}

最佳答案

看起来就像你打电话时

mainFragment.setTextView(value);

您的电视 TextView 尚不存在。

要修复它,您必须使用 BundleStringActivity 传递到 fragment 。

还有其他变体,例如:

  1. Singleton中存储值
  2. 共享首选项中存储值
  3. 创建应使用 Observer 模式显示的值队列
  4. 使用 RxRelay 中的 ReplayRelay库为 RxBus 。实际上与第三个选项几乎相同

因此,与使用 Bundle 相比,样板代码会少一些

关于java - 设置textView时Fragment中的NPE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49056344/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com