在以下链接中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 的答案,为什么你必须将其转换为 OnListItemClickListener
。 onAttach
Fragment
的生命周期方法接受任何 Activity
- 和一个Activity
没有MainFragment.OnListItemClickListener
默认实现。
所以编译器不知道这一点,但你知道 MainActivity
已经实现了它,并通过强制转换告诉编译器 MainActivity implements MainFragment.OnListItemClickListener
.
关于java - 为什么 Android 中的 Activity 对象被转换为接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45034559/