@coden55

Запутался в контекстах (Fragment, AlertDialog, callback interface)?

Код ниже, диалог не вызывает ((ResultListener) context).onSpinnerSelectResult(keys[selecteditemid]);, ошибка java.lang.ClassCastException: ru........android.Activity_Main cannot be cast to ru.............android.Dialog_SpinnerSelect$ResultListener. Уже голову сломал как угодить программке, помогите:)
public class Fragment_Layers extends Fragment implements Dialog_SpinnerSelect.ResultListener {
......
    void openDialog() {
        Dialog_SpinnerSelect dialog = new Dialog_SpinnerSelect(getActivity());
        dialog.show();
    }

    @Override
    public void onSpinnerSelectResult(Integer result) {
        //todo 
    }
}

public class Dialog_SpinnerSelect {

    private Context context;

    public Dialog_SpinnerSelect(Context context) {
        this.context = context;
        builder = new AlertDialog.Builder(context);
}

   public void show() {
        ......
builder.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int arg1) {
                ((ResultListener) context).onSpinnerSelectResult(keys[selecteditemid]);
            }
        });
.......        
dialog.show();
    }

    public interface ResultListener {
        void onSpinnerSelectResult(Integer result);
    }
}
  • Вопрос задан
  • 175 просмотров
Решения вопроса 1
@kamiLLxiii
Android-разработчик
Ты не в контекстах запутался, ты не понимаешь, какие параметры передаешь в конструкторы. Советую внимательнее поизучать Java.
Замени
Dialog_SpinnerSelect dialog = new Dialog_SpinnerSelect(getActivity());
на
Dialog_SpinnerSelect dialog = new Dialog_SpinnerSelect(this);
;
private Context context;

public Dialog_SpinnerSelect(Context context) {
        this.context = context;
        builder = new AlertDialog.Builder(context);
}
на
private Fragment_Layers fragment;

public Dialog_SpinnerSelect(Fragment_Layers fragment) {
        this.fragment = fragment;
        builder = new AlertDialog.Builder(fragment.getActivity());
}
;
public void onClick(DialogInterface dialog, int arg1) {
                ((ResultListener) context).onSpinnerSelectResult(keys[selecteditemid]);
            }
на
public void onClick(DialogInterface dialog, int arg1) {
                ((ResultListener) fragment).onSpinnerSelectResult(keys[selecteditemid]);
            }
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@FoxInSox
context не может стать ResultListener. Почитайте сначала как писать на Java, а затем пробуйте что-то делать под Android.
Ответ написан
Комментировать
@Hakito
Как я понял, у Вас MainActivity не реализует интерфейс OnResultListener. Тут из самой ошибки все ясно
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы