【发布时间】:2015-07-23 10:07:06
【问题描述】:
我对如何与 Fragment 和 Activity 进行通信感到困惑。例如,此处定义了一个接口 (https://developer.android.com/training/basics/fragments/communicating.html)。
public class HeadlinesFragment extends ListFragment {
OnHeadlineSelectedListener mCallback;
// Container Activity must implement this interface
public interface OnHeadlineSelectedListener {
public void onArticleSelected(int position);
}
...
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
// The user clicked on a list item.
mCallback.onArticleSelected(position);
}
}
最终,从 MainActivity 调用以下方法。
public static class MainActivity extends Activity
implements HeadlinesFragment.OnHeadlineSelectedListener{
...
public void onArticleSelected(int position) {
// Do something
}
}
我的问题是:
-
mCallback 如何“知道”要调用哪个 onArticleSelected 方法(因为可能有其他类实现了 OnHeadlineSelectedListener)。
mCallback.onArticleSelected(position);如果它去了,我不会感到困惑:
mCallback = new OnHeadSelectedListener() { @Override public void onArticleSelected(int position) // Do something }然后在 MainActivity 中以某种方式引用 mCallback 以某种方式利用 onArticleSelected 方法。然而,在示例代码中,该行智能地坚持“一个”接口。这是怎么发生的?
另外,我发现我在 MainActivity 中实现的 onArticleSelected 方法的 Log 之前被 HeadlineFragment 中的 onListItemClick 方法调用。是预期的吗?
【问题讨论】:
-
您错过了 Activity 将侦听器设置为片段的方法
标签: java android android-fragments interface