我有一個使用適配器和顯示回收站列表視圖的片段的活動。當用戶點擊任何行時,我會顯示一個AlertDialog(創建爲DialogFragment),以供他們輸入數據。無法初始化上下文
來自AlertDialog的回調由Fragment監聽,並且一旦所有字段在Fragment中被捕獲,則完成的對象被髮送回活動以將其保存在數據庫中。
下面是截圖...
現在經過我輸入一個名稱,然後按下去,我得到一個崩潰,因爲從DisplayTextEntryAlert類(即DialogFragment)偵聽器未初始化。
java.lang.NullPointerException: Attempt to invoke interface method 'void alerts.DisplayTextEntryAlert$DisplayTextEntryAlertListener.onYesButtonClicked(android.support.v4.app.DialogFragment, java.lang.String)' on a null object reference
at alerts.DisplayTextEntryAlert$1.onClick(DisplayTextEntryAlert.java:97)
at android.support.v7.app.AlertController$ButtonHandler.handleMessage(AlertController.java:161)
在我的DisplayTextEntryAlert類中,當執行mListener.onYesButtonClicked時它崩潰。
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
....
....
....
builder.setPositiveButton(R.string.stgContinue, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
mTextEntered = editTextControl.getText().toString();
mListener.onYesButtonClicked(DisplayTextEntryAlert.this, mTextEntered);
}
});
的mListener對象在「onAttach」的方法在DisplayTextEntryAlert類初始化
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof DisplayTextEntryAlertListener) {
mListener = (DisplayTextEntryAlertListener)context;
} else {
Log.d(this.toString(),"trackContext");
Log.d(this.toString(),context.toString());
//throw new RuntimeException(context.toString() + " must implement DisplayTextEntryAlertListener");
}
}
但在調試時,我注意到,這條線永遠不會被執行。
mListener = (DisplayTextEntryAlertListener)context;
這AlertDialog是從從活性(AddFriendActivity)推出的片段類(AddFriendFragment)
DisplayTextEntryAlert displayTextEntryAlertFragment = DisplayTextEntryAlert.newInstance("","Enter the first name");
FragmentManager fragmentManager = ((FragmentActivity) mContext).getSupportFragmentManager();
displayTextEntryAlertFragment.show(fragmentManager, "newFriendFragment"); // give it a name for retrieving
在「mContext」創建在這裏被從onCreateView方法在該片段
創建@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_newfriend_list, container, false);
// Set the adapter
if (view instanceof RecyclerView) {
mContext = view.getContext();
....
....
....
mNewFriendAdapter = new NewFriendAdapter(mNewFriendFields, this);
recyclerView.setAdapter(mNewFriendAdapter);
}
return view;
}
問題:我很明顯在這裏丟失了一些東西,mListener會在DisplayTextEntryAlert類的onAttach方法中初始化SS。
任何線索?
這裏是參考 https://gist.github.com/ArdenDev/229c69f803dce62a1e46acb0e05c7f1a
你可以試着改變DisplayTextEntryAlert.this'''到getActivity()''中onYesButtonClicked'的參數 – KeLiuyue
@KeLiuyue沒有將無法工作。參數需要是DialogFragment。 – ArdenDev