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
'Programing' 카테고리의 다른 글
Java 어노테이션 ElementType 상수는 무엇을 의미합니까? (0) | 2021.01.10 |
---|---|
오류 C2275 :이 유형을 표현식으로 잘못 사용했습니다. (0) | 2021.01.10 |
DataGridView에서 선택하는 기능을 비활성화하는 방법은 무엇입니까? (0) | 2021.01.10 |
Bootstrap 3 Navbar의 브랜드 로고 중심 (0) | 2021.01.10 |
Swift의 클래스 내에서 정적 변수에 액세스 (0) | 2021.01.10 |