IllegalStateException:片段 FiltroOpcao 未附加到上下文。- Android 错误
IllegalStateException: Fragment FiltroOpcao not attached to a context.- Android Error
我正在尝试在我的 Android 应用程序上获取用户选择的项目到片段处方集,在 google documentation 之后,这可以使用库中的这个方法,我尝试实现这个方法和你的我的 DialogFragment 中的接口并在我的片段公式中获取它,但是,当我单击打开 Dialog Fragment 所需的按钮时返回错误。
这是我的对话片段 class:
public class FiltroOpcao extends DialogFragment {
OnFiltroEscolhido listener;
private final String[] filtroAnuncio = getResources().getStringArray(R.array.filtro_array);
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
try {
listener = (OnFiltroEscolhido) getTargetFragment();
}catch(ClassCastException e){
throw new ClassCastException(context.toString()+"Deve ser implementado");
}
}
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Filtrar por:")
.setItems(R.array.filtro_array, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
listener.pegarFiltro(filtroAnuncio[which]);
}
});
return builder.create();
}
public interface OnFiltroEscolhido{
void pegarFiltro (String escolha);
}
}
这是我调用 DialogFragment 的地方,崩溃发生在我的 VendaFragment 片段上 class
public void onClick(View v) {
FiltroOpcao filtroOpcao = new FiltroOpcao();
filtroOpcao.setTargetFragment(VendaFragment.this, 1);
filtroOpcao.show(VendaFragment.this.getChildFragmentManager(), "FiltroOpcao");
}
private final String[] filtroAnuncio = getResources().getStringArray(R.array.filtro_array);
可能 getResources()
是问题所在,因为您在附加片段之前正在使用它。
尝试将filtroAnuncio
的初始化移动到onCreateDialog()
private String[] filtroAnuncio;
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
filtroAnuncio = getResources().getStringArray(R.array.filtro_array);
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Filtrar por:")
.setItems(R.array.filtro_array, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
listener.pegarFiltro(filtroAnuncio[which]);
}
});
return builder.create();
}
我正在尝试在我的 Android 应用程序上获取用户选择的项目到片段处方集,在 google documentation 之后,这可以使用库中的这个方法,我尝试实现这个方法和你的我的 DialogFragment 中的接口并在我的片段公式中获取它,但是,当我单击打开 Dialog Fragment 所需的按钮时返回错误。 这是我的对话片段 class:
public class FiltroOpcao extends DialogFragment {
OnFiltroEscolhido listener;
private final String[] filtroAnuncio = getResources().getStringArray(R.array.filtro_array);
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
try {
listener = (OnFiltroEscolhido) getTargetFragment();
}catch(ClassCastException e){
throw new ClassCastException(context.toString()+"Deve ser implementado");
}
}
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Filtrar por:")
.setItems(R.array.filtro_array, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
listener.pegarFiltro(filtroAnuncio[which]);
}
});
return builder.create();
}
public interface OnFiltroEscolhido{
void pegarFiltro (String escolha);
}
}
这是我调用 DialogFragment 的地方,崩溃发生在我的 VendaFragment 片段上 class
public void onClick(View v) {
FiltroOpcao filtroOpcao = new FiltroOpcao();
filtroOpcao.setTargetFragment(VendaFragment.this, 1);
filtroOpcao.show(VendaFragment.this.getChildFragmentManager(), "FiltroOpcao");
}
private final String[] filtroAnuncio = getResources().getStringArray(R.array.filtro_array);
可能 getResources()
是问题所在,因为您在附加片段之前正在使用它。
尝试将filtroAnuncio
的初始化移动到onCreateDialog()
private String[] filtroAnuncio;
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
filtroAnuncio = getResources().getStringArray(R.array.filtro_array);
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Filtrar por:")
.setItems(R.array.filtro_array, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
listener.pegarFiltro(filtroAnuncio[which]);
}
});
return builder.create();
}