Activity和ListFragment之间的通信不起作用(不兼容的类型)

问题描述 投票:0回答:2

尝试在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);

    }
android android-fragments callback
2个回答
0
投票

您正在尝试将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

在你的代码中检查它!


0
投票

你的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);
        }
    }
}

© www.soinside.com 2019 - 2024. All rights reserved.