Programing

Fragment에 AlertDialog를 표시하는 방법은 무엇입니까?

lottogame 2021. 1. 10. 16:44
반응형

Fragment에 AlertDialog를 표시하는 방법은 무엇입니까?


내 앱에 경고 대화 상자를 표시하고 싶습니다. 조각을 사용하고 있습니다. 이 작업을 수행하기 위해 아래 코드를 시도했습니다.

 AlertDialog ad = new AlertDialog.Builder(context)
            .create();
    ad.setCancelable(false);
    ad.setTitle(title);
    ad.setMessage(message);
    ad.setButton(context.getString(R.string.ok_text), new DialogInterface.OnClickListener() {

        public void onClick(DialogInterface dialog, int which) {
            dialog.dismiss();
        }
    });
ad.show();

그러나 그것은 충돌했고 logcat의 오류는 다음과 같습니다.

04-18 15 : 23 : 01.770 : E / AndroidRuntime (9424) : android.view.WindowManager $ BadTokenException : 창을 추가 할 수 없음-토큰 null이 애플리케이션 용이 아닙니다.

인터넷에서 충돌이 컨텍스트 문제로 인한 것임을 알게되었습니다. 나는 맥락을

context = this.getActivity().getApplicationContext();

나는 이것의 문제가 무엇인지 모른다. 아무도 나를 도울 수 있습니까?


교체 context와 함께 getActivity().

ApplicationContext대화 상자 생성과 같은 작업에 사용해서는 안됩니다. 프래그먼트에 있기 때문에 Fragments getActivity()메서드 를 호출하여 대신 Activity-Context를 가져올 수 있습니다 .


이 질문에 대한 추가 정보 (이벤트 내에서 관리되는 조각의 AlertDialog) :

onClick (View v) 또는 onLongClick (View v)과 같은 이벤트 내에서 AlertDialog를 호출하면 다음을 사용할 수 있습니다.

public boolean onClick(View v) {
    ...
    AlertDialog.Builder alertBuilder = new AlertDialog.Builder(v.getContext());
    ...
}

DialogFragment를 사용해보십시오. Fragments를 사용할 때 DialogFragment가 더 좋습니다.


나는 Fragment에서 AlertDialog를 생성하려고 시도하는 유사한 문제가 있습니다. NullPointerException이 발생했습니다. 처음에는 다음과 같이했습니다.

AlertDialog alertDialog = new AlertDialog.Builder(getActivity()).create();

NullPointerException호출 할 때 특히 발생 alertDialog.show()이후에 코드. 그러나에 대한 문서를 검색 한 후 [AlertDialog.Builder Doc]AlertDialog.Builder() 을 초기화하는 또 다른 방법이있는 것 같습니다. 이는 아래와 같이 테마 / resId를 포함하는 것입니다.

AlertDialog alertDialog = new AlertDialog.Builder(getActivity(), R.style.Theme_AppCompat_Dialog_Alert).create();

이것은 당장 해결 NullPointerException되었습니다. 이것이 당신에게도 도움이되기를 바랍니다!


listView 내부의 어댑터에서 사용 했으므로 사용할 수 없습니다 getActivity(). 작동하도록하기 위해 getActivity()조각의 어댑터 인스턴스화에서 컨텍스트에 사용 했습니다.

this.adapter = new myAdapter(getActivity(), factory);

나중에 다른 클래스 (어댑터 클래스)에서 사용할 수 있었고 getContext()작동했습니다.


                       AlertDialog alert= null;
                        AlertDialog.Builder build= new AlertDialog.Builder(getActivity());
                        build.setTitle("title");
                        build.setItems(stringarrayname, new DialogInterface.OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                // TODO Auto-generated method stub
                            //Toast.makeText(getActivity(), "hi", Toast.LENGTH_SHORT).show();   

                            }
                        });
                        build.create().show();

이것을 시도하거나 DialogFragment를 사용할 수 있습니다.

private void showAlert(final int position) {
        new AlertDialog.Builder(getActivity().getApplicationContext())
                .setTitle("Delete entry")
                .setMessage("Are you sure you want to delete this entry?")
                .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                      //  deleteSuggestions(position);
                    }
                })
                .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        // do nothing
                    }
                })
                .setIcon(android.R.drawable.ic_dialog_alert)
                .show();
    }

참조 URL : https://stackoverflow.com/questions/10207206/how-to-display-alertdialog-in-a-fragment

반응형