java - 为什么 Android 中的 Activity 对象被转换为接口(interface)?

标签 java android android-activity interface casting

在以下链接中https://github.com/iPaulPro/Android-ItemTouchHelper-Demo/blob/master/app/src/main/java/co/paulburke/android/itemtouchhelperdemo/MainFragment.java ,Activity 对象被转换为名为 OnListItemClickListener 的内部接口(interface)。

mItemClickListener.onListItemClick(position);

MainFragment类的完整源代码如下:

public class MainFragment extends ListFragment {

    public interface OnListItemClickListener {
        void onListItemClick(int position);
    }

    private OnListItemClickListener mItemClickListener;

    public MainFragment() {
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);

        mItemClickListener = (OnListItemClickListener) activity;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        final String[] items = getResources().getStringArray(R.array.main_items);
        final ArrayAdapter<String> adapter = new ArrayAdapter<>(getActivity(),
                android.R.layout.simple_list_item_1, items);
        setListAdapter(adapter);
    }

    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
        mItemClickListener.onListItemClick(position);
    }
}

为什么 Activity 对象要转换为接口(interface)?

stackoverflow上有类似的问题How is it possible to cast an Android Activity to an interface?但它对我来说并不令人满意,它没有回答我的问题。

最佳答案

为了扩展 @CommonsWare 的答案,为什么你必须将其转换为 OnListItemClickListeneronAttach Fragment的生命周期方法接受任何 Activity - 和一个Activity没有MainFragment.OnListItemClickListener默认实现。

所以编译器不知道这一点,但你知道 MainActivity已经实现了它,并通过强制转换告诉编译器 MainActivity implements MainFragment.OnListItemClickListener .

关于java - 为什么 Android 中的 Activity 对象被转换为接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45034559/

相关文章:

java - 在 JavaFX 中使用大括号进行父组织

java - JVM 是否在 OutOfMemoryError 后自行终止

android - 试图重新打开一个已经关闭的对象 : java. lang.IllegalStateException :?

android - 如何在 Android 上将原始对象(不复制)从一个 Activity 传递到另一个 Activity

Java 泛型 : how to get a generic type from a method?

java - 在控制台程序和图形程序之间切换java

android - 可扩展列表适配器根本不刷新

android - 播放/停止按钮工作正常。但可绘制背景无法正常工作

java - 错误 :com. android.dex.DexIndexOverflowException : method ID not in [0, 0xffff]:65536

android - 在 Activity 中使用 intent.getStringExtra