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