Связь между Activity и ListFragment не работает (несовместимые типы) - PullRequest
0 голосов
/ 21 марта 2019

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

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

 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);

    }

Ответы [ 2 ]

0 голосов
/ 22 марта 2019

Что внутри вашего 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);
        }
    }
}

0 голосов
/ 21 марта 2019

Вы пытаетесь привести свой обратный вызов 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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...