Пользовательский диалоговый интерфейс для фрагмента / передачи данных об ошибках / ошибки нулевой ссылки - PullRequest
0 голосов
/ 27 октября 2019

Я пытаюсь реализовать диалоговое окно, которое появляется при нажатии кнопки или на панели инструментов 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...