[英]Null pointer exception in OnClickListener in fragment when configuration change occur
嗨,我是 Android 的新手,當我的應用程序中發生配置更改(從縱向到橫向)時,我收到 Null 點異常這是我的簡單計算器應用程序
我在片段中的代碼是:
公共 class CalculatorFragment 擴展 Fragment {
private TextView mTextViewString;
private boolean mLastNumeric;
private boolean mStateError;
private boolean mLastDot;
private Button mButtonDelete;
private Button mButtonOne;
private Button mButtonTwo;
private Button mButtonThree;
private Button mButtonFour;
private Button mButtonFive;
private Button mButtonSix;
private Button mButtonSeven;
private Button mButtonEight;
private Button mButtonNine;
private Button mButtonZero;
private Button mButtonSum;
private Button mButtonDivide;
private Button mButtonNegative;
private Button mButtonPoint;
private Button mButtonEqual;
private Button mButtonMultiply;
public CalculatorFragment() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_calculator, container, false);
findViews(view);
setNumericOnClickListener();
setOperatorOnClickListener();
return view;
}
private void findViews(View view) {
mTextViewString = view.findViewById(R.id.textView_show_number);
mButtonDelete = view.findViewById(R.id.button_delete);
mButtonOne = view.findViewById(R.id.button_one);
mButtonTwo = view.findViewById(R.id.button_two);
mButtonThree = view.findViewById(R.id.button_three);
mButtonFour = view.findViewById(R.id.button_four);
mButtonFive = view.findViewById(R.id.button_five);
mButtonSix = view.findViewById(R.id.button_six);
mButtonSeven = view.findViewById(R.id.button_seven);
mButtonEight = view.findViewById(R.id.button_eight);
mButtonNine = view.findViewById(R.id.button_nine);
mButtonNegative = view.findViewById(R.id.button_negative);
mButtonSum = view.findViewById(R.id.button_sum);
mButtonDivide = view.findViewById(R.id.button_divide);
mButtonMultiply = view.findViewById(R.id.button_multiply);
mButtonZero = view.findViewById(R.id.button_zero);
mButtonPoint = view.findViewById(R.id.button_point);
mButtonEqual = view.findViewById(R.id.button_equal);
}
private void setNumericOnClickListener() {
View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View v) {
Button button = (Button) v;
if (mStateError) {
mTextViewString.setText(button.getText());
mStateError = false;
} else {
mTextViewString.append(button.getText());
}
mLastNumeric = true;
}
};
mButtonZero.setOnClickListener(listener);
mButtonOne.setOnClickListener(listener);
mButtonTwo.setOnClickListener(listener);
mButtonThree.setOnClickListener(listener);
mButtonFour.setOnClickListener(listener);
mButtonFive.setOnClickListener(listener);
mButtonSix.setOnClickListener(listener);
mButtonSeven.setOnClickListener(listener);
mButtonEight.setOnClickListener(listener);
mButtonNine.setOnClickListener(listener);
}
我在 Android Studio 中的錯誤文本是:
java.lang.NullPointerException:com.example.calculator.controller.fragments.CalculatorFragment.setNumericOnClickListener(CalculatorFragment.java:107)
Android 在應用程序消失(打開另一個應用程序)或配置更改(旋轉等)時殺死對象,因此您必須確保在使用它之前獲取對象實例。
正如我在您的代碼中看到的那樣,在您的“setNumericOnClickListener”方法中,您嘗試將“onClickListener”分配給每個按鈕 object,但是當應用程序暫停或停止(旋轉或打開另一個應用程序)時它們設置為 null ,您應該確保這些對象不是 null。 我建議您在“onResume”回調方法上實例化它們。
You can learn more about the Android Activity LifeCycle Here: URL: https://developer.android.com/guide/components/activities/activity-lifecycle
您可以在此處了解有關 Android 片段生命周期的更多信息: https://developer.android.com/guide/components/fragments
您可以在此處獲得有關片段和活動如何相互關聯的更多詳細信息: 在片段生命周期期間何時調用 onAttach?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.