2015-09-30 38 views
0

我有一個DatePickerDialog在片段中成功啓動。當方向更改發生時,應用程序崩潰。 logcat輸出表示NPE發生在DatePickerFragment中的onDismiss中。 onDismiss代碼用於切換軟鍵盤以再次顯示(啓動DatePickerDialog後將其切換)。用於啓動軟鍵盤的InputMethodManager使用「getActivity()」引用,我認爲這會引起定位後的崩潰,因爲該Activity已重新創建。我可以使用findFragmentByTag作爲在方向更改時重新使用對話框片段的方式來替換對片段的引用嗎?如何引用findFragmentByTag來重新顯示軟鍵盤?

下面是部分DatePickerFragement文件:

public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener { 

public DatePickerFragment() { 
} 

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
... 
DatePickerDialog picker = new DatePickerDialog(getActivity(), 
    this, year, month, day); return picker; 
} 


public void onDismiss(final DialogInterface dialog) { 
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(CardViewActivity.INPUT_METHOD_SERVICE); 
imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0); 
super.onDismiss(dialog); 
} 

} 

Activity file // uses show() to launch the DialogFragment: 

public class Activity extends AppCompatActivity { 
... 
DatePickerFragment newFragment = new DatePickerFragment(); 
newFragment.show(getSupportFragmentManager(), "datePicker"); 

回答

1

檢查getActivity()是不是在你的onDismiss()

+0

null因此,使用IF(getActivity()!= NULL)? – AJW

+0

是的@AJW先生... – Elltz

+0

好的,這是正確的:如果活動沒有新創建(由於方向改變),那麼當onDismiss被調用,然後重新顯示鍵盤? – AJW