我有MainActivity
个帖子和2个片段:MainFragment
和StringsFragment
。
我想在MainFragment
的TextView(位于StringsFragment
)中设置文字。
所以在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);
}
和MainActivity:
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时,我得到了nullpointer:
setText(java.lang.CharSequence)' on a null object reference
从这里
public void setTextView(String value){
tv.setText(value);
}
答案 0 :(得分:1)
当你打电话时看起来像
mainFragment.setTextView(value);
您的电视TextView
尚不存在。
要修复它,您必须使用Bundle
将String
从Activity
传递到片段。
还有另外一些变体,如:
Singleton
Shared Preferences
Observer
pattern ReplayRelay
用作RxBus
。其实
与第三个选项几乎相同因此,使用Bundle