myAdapter为什么对onDataChange范围可见?其他变量不可见。我对它何时在onDataChange中可见以及何时不可见感到困惑:
private RecyclerView.Adapter mAdapter;
private RecyclerView.LayoutManager mLayoutManager;
private ArrayList<User> myDataset;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
myDataset = new ArrayList<User>();
mAdapter = new MyAdapter(myDataset);
ValueEventListener listener= new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
//doing stuff here, such as updating the data set
mAdapter.notifyDataSetChanged();//<--how is it visible here? I thought its out of the async listener scope?
}
对于某些变量,我知道它不在范围内,我需要声明它们final
,并且此mAdapter
甚至myDataset
都是可见的
答案 0 :(得分:2)
在onCreateView
中声明的局部变量只有在声明为final的情况下,才能在内部类的onDataChange
中访问。
包含类的成员字段在您的内部类中自动可见,因此在其onDataChange
方法中也自动可见。这样做的原因是编译器隐式定义了一个指向外部对象的final
变量。