Связь между Activity и ListFragment не работает (несовместимые типы)

#android #android-fragments #callback

#Android #android-фрагменты #обратный вызов

Вопрос:

Пытаюсь установить связь между Activity и ListFragment точно так же, как в документах.

Но когда я определяю интерфейс:

  public class HeadlinesFragment extends ListFragment {
    OnHeadlineSelectedListener callback;

    public void setOnHeadlineSelectedListener(Activity activity) {
        callback = activity;
    }

    // Container Activity must implement this interface
    public interface OnHeadlineSelectedListener {
        public void onArticleSelected(int position);
    }
  

Я улавливаю ошибку «Несовместимые типы». здесь: callback = activity;

UPD: Я прикрепляю это здесь:

 public class MainActivity extends AppCompatActivity
        implements MainFragment.OnHeadlineSelectedListener {

    @Override
    public void onAttachFragment(Fragment fragment) {
        if (fragment instanceof MainFragment) {
            MainFragment headlinesFragment = (MainFragment) fragment;
            headlinesFragment.setOnHeadlineSelectedListener(this);
        }
    }

    @Override
    public void onArticleSelected(int position) {

        MenuFragment newFragment = new MenuFragment();
        Bundle bundle = new Bundle();
        bundle.putInt("Integer", position);
        newFragment.setArguments(bundle);

    }
  

Комментарии:

1. Можете ли вы опубликовать действие там, где вы его прикрепляете

2. @YassineBELDI готово

Ответ №1:

Вы пытаетесь выполнить обратный вызов OnHeadlineSelectedListener в Activity.class введите. Но это два разных типа! Вы должны передать обратный вызов OnHeadlineSelectedListener методу setOnHeadlineSelectedListener(), например:

 public void setOnHeadlineSelectedListener(OnHeadlineSelectedListener callback) {
    this.callback = callback;
}
  

Или ваш MainActivity должен реализовывать HeadlinesFragment.OnHeadlineSelectedListener

 public static class MainActivity extends Activity
    implements HeadlinesFragment.OnHeadlineSelectedListener
  

Проверьте это в своем коде!

Ответ №2:

То, что находится внутри вашего fragment instanceof MainFragment , не будет выполнено, ваш фрагмент HeadlinesFragment не MainFragment

 public static class MainActivity extends Activity
        implements HeadlinesFragment.OnHeadlineSelectedListener{
    // ...

    @Override
    public void onAttachFragment(Fragment fragment) {
        if (fragment instanceof HeadlinesFragment) {
            HeadlinesFragment headlinesFragment = (HeadlinesFragment) fragment;
            headlinesFragment.setOnHeadlineSelectedListener(this);
        }
    }
}