public class NameList extends ListFragment{
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
ArrayAdapter nameList = new ArrayAdapter(getActivity(),R.layout.name_row, R.id.text_example);
}
}
若将构造器参数中的getActivity()替换为myActivity.this便报错不可resolve。构造器原型为:public ArrayAdapter (Context context, int resource, int textViewResourceId)
,myActivity.this在Activity的上下文环境里可以解析为Context。
那么,是什么原因使得在Fragment的上下文中不可以把myActivity.this解析为Context呢?
@吉人天相 说的就对
补充一点.
其实你翻一下this在Java中的实现机制更好理解..
在java中 this是通过在非静态方法中添加隐参数的方式实现的.
以你给的代码为例子
编译以后这段代码会变成这样
}
注意看onActivityCreated的参数变化. 通过方法的隐参数传递的this总是指向自身的指针.
内部类中的Parent.this是另一种实现机制
假设你的NameList是MyActivity中的一个内部类的话.
那么编译的时候会在NameList中生成一个
这个就是你调用MyActivity.this时候真正使用的对象了.
显然 如果你的NameList不是MyActivity的内部类....你当然调用不到这个this$0对象..也就没有MyActivity.this了....从原理上理解比背概念稍微好一点吧
一个反编译后的demo:
反编译后:
注意看这一行
和这一行
这个就对应 print方法里那个 Outer.this