尝试在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);
}
您正在尝试将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
在你的代码中检查它!
你的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);
}
}
}