关于Firebase变量范围的困惑

时间:2018-12-24 19:14:59

标签: android firebase firebase-realtime-database

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都是可见的

1 个答案:

答案 0 :(得分:2)

onCreateView中声明的局部变量只有在声明为final的情况下,才能在内部类的onDataChange中访问。

包含类的成员字段在您的内部类中自动可见,因此在其onDataChange方法中也自动可见。这样做的原因是编译器隐式定义了一个指向外部对象的final变量。