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
都可见,没有问题 最佳答案
如果在onCreateView
中声明的局部变量声明为final,则只能在内部类的onDataChange
中访问。
包含类的成员字段在您的内部类中自动可见,因此在其onDataChange
方法中也自动可见。这样做的原因是编译器隐式定义了引用外部对象的final
变量。