Я пытаюсь реализовать диалоговое окно, которое появляется при нажатии кнопки или на панели инструментов action_add. Он отправляет данные из диалогового окна во фрагмент (пытаясь понять, как это работает для обоих). Мой класс диалога имеет интерфейс. Я использую интерфейс для передачи данных во фрагмент, затем я использую Bundle для передачи данных из действия во фрагмент.
Я думаю, что ошибка происходит в связке, потому что она всегда показывала "aпустая ссылка ", хотя, если я поднимаю переменную раньше, она на 100% не равна нулю
Мой dialogFragment
public class searchPopUp extends DialogFragment {
private EditText etSearch;
private ImageButton btnCancelSearch, btnSubmitSearch;
ExampleDialogListener listener;
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
View view = inflater.inflate(R.layout.pop_search, null);
etSearch = view.findViewById(R.id.et_search);
btnCancelSearch = view.findViewById(R.id.btn_cancelSearch);
btnCancelSearch.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
cancelClick();
}
});
btnSubmitSearch = view.findViewById(R.id.btn_SearchSubmit);
btnSubmitSearch.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Toast.makeText(getActivity(), etSearch.getText().toString().trim(), Toast.LENGTH_SHORT).show();
String lestTempThis = etSearch.getText().toString();
listener.applyTexts(lestTempThis);
}
});
builder.setView(view);
return builder.create();
}
private void cancelClick() {
dismiss();
}
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
try {
listener = (ExampleDialogListener) getTargetFragment();
} catch (ClassCastException e) {
Log.e("Custom PopUP","OnAttach: ClassCastException: "+e.getMessage());
}
}
public interface communicateData{
void sendText(String message);
}
public interface ExampleDialogListener {
void applyTexts(String searchInput);
}}
Мой фрагмент (место, где мне нужно получить данные
public class fragment_home extends Fragment implements searchPopUp.ExampleDialogListener {
View v;
RecyclerView rj;
ArrayList<todoitem_joblist> todoJoblist = new ArrayList<>();
DialogFragment myPopUPDialog;
ImageButton btnSearch;
String jTitle="DCCFTPPI Job Aselole asik"; // max 30 char
String jDate="06/08/2019";
String jTime="20:58";
String jName="TAM";
String last= "LAST JOB";
String tempSearch="";
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
v = inflater.inflate(R.layout.fragment_home, container, false);
rj = v.findViewById(R.id.recyclerJobList);
jobListAdapter adapter = new jobListAdapter(getContext(),todoJoblist);
rj.setLayoutManager(new LinearLayoutManager(getActivity()));
rj.setAdapter(adapter);
btnSearch = v.findViewById(R.id.btn_search);
btnSearch.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
searchDialog();
}
});
return v;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
dummyInsert();
}
public void dummyInsert(){
todoJoblist.add(new todoitem_joblist(jTitle,jDate,jTime,jName));
}
public void insertAll(){
}
public void insertSearch(){
}
private void searchDialog() {
searchPopUp spop = new searchPopUp();
spop.show(getFragmentManager(),"pop search");
}
@Override
public void applyTexts(String searchinput) {
TextView dummy = v.findViewById(R.id.f_tittle_h);
dummy.setText(searchinput);
//Toast.makeText(getActivity(), searchinput, Toast.LENGTH_SHORT).show();
}}
На самом деле я видел некоторую похожую проблему, такую как вопрос stackoverflow , но ошибка все еще работает на мне,
это мой журнал ошибок
2019-10-28 01:16:47.781 16139-16139/com.posjobviewer E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.posjobviewer, PID: 16139
java.lang.NullPointerException: Attempt to invoke interface method 'void com.posjobviewer.home_fragments.searchPopUp$ExampleDialogListener.applyTexts(java.lang.String)' on a null object reference
at com.posjobviewer.home_fragments.searchPopUp$2.onClick(searchPopUp.java:49)
at android.view.View.performClick(View.java:7125)
at android.view.View.performClickInternal(View.java:7102)
at android.view.View.access$3500(View.java:801)
at android.view.View$PerformClick.run(View.java:27336)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)