我有这个让我疯狂的NPE,也许这只是“隧道视觉”但我无法解决它。我在一个活动中有一个片段,在活动的onCreate()
中我实例化片段。然后,当片段被添加到活动时,我从活动中调用片段方法。代码在
transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.ActionInputFragment, settingsFragment).addToBackStack(null);
transaction.commit();
if(jsonUserData != null)
settingsFragment.loadUserData(jsonUserData);
在片段中我有:
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
this.ctx = getActivity();
edtFullName = (EditText) getActivity().findViewById(R.id.edtFullNameSettings);
edtFullName.addTextChangedListener(new TextWatcher .....);
}
添加textwatcher有效。下面(在同一片段中)是其调用生成错误的方法:
public void loadUserData(JSONObject jsonUserData) {
String fullName;
try {
fullName = String.format("%s %s", jsonUserData.getString("first_name"), jsonUserData.getString("last_name"));
} catch (JSONException e) {
fullName = "";
}
//if(edtFullName != null)
this.edtFullName.setText(fullName);
}
我检查了布局,并且editText id就在那里。
答案 0 :(得分:2)
问题是this.edtFullName
尚未初始化,因为onActivityCreated
尚未调用,因此调用edtFullName
方法时setText()
为空< / p>
您可以在EditText
中传递loadUserData
中onActivityCreated
的引用,而不是{{1}}