gpt4 book ai didi

java - 为什么我的 fragment 中的 Activity 上下文为空?

转载 作者:行者123 更新时间:2023-12-01 07:59:00 25 4
gpt4 key购买 nike

我正在尝试创建一个样板 fragment 。当我尝试设置 RecyclerView 的 LayoutManager 时,我不断收到空引用错误:

Attempt to invoke virtual method 'void android.support.v7.widget.RecyclerView.setLayoutManager(android.support.v7.widget.RecyclerView$LayoutManager)' on a null object reference

以下是我调用以获取错误的顺序:

主类:

public class PagerAdapter extends FragmentPagerAdapter {
...
@Override
public Fragment getItem(int position){
switch(position){
default:
return new WhatsNew();
}
}
}

WhatsNew.class:

public class WhatsNew extends Base {

private LayoutInflater mInflater;
private Handler mHandler = new Handler();

private RecyclerView.LayoutManager mLayoutManager;

@Override
public void init() {
mInflater = LayoutInflater.from(mContext);
mLayoutManager = new LinearLayoutManager(mContext);
mDataView.setLayoutManager(mLayoutManager); //<-- Where the null reference is
}

@Override
public void doWork() {

WhatsNewAdapter mAdapter = new WhatsNewAdapter();
mDataView.setAdapter(mAdapter);
...

}

...
}

基类:

public class Base extends Fragment {

public View mView;
public RecyclerView mDataView;
public ProgressBar mProgressBar;
public Context mContext;

public Base() { }

@Override
public void onAttach(Activity mActivity) {
mContext = mActivity;
init();
doWork();
}

@Override
public View onCreateView(LayoutInflater _i, ViewGroup _vg, Bundle savedInstanceBundle){
mView = _i.inflate(R.layout.f_base, null);
mDataView = (RecyclerView) mView.findViewById(R.id.data);
mProgressBar = (ProgressBar)mView.findViewById(R.id.loading);
return mView;
}

public void init() { }

public void doWork() { }

}

我读自 here我应该重写 onAttach(Activity Activity) 来确保上下文不为空,但从错误来看,它似乎仍然为空。有人知道为什么我会偶然收到此错误,或者对如何设置样板 fragment 有更好的建议吗?抱歉,如果代码看起来很糟糕,我正在努力学习更好地使用 fragment 。 :)

最佳答案

您的mDataView尚未初始化。

onAttach()onCreateView() 之前调用。在 onCreateView() 中初始化 mDataView 之前,会调用您使用 mDataViewinit()

将需要访问 fragment View 的代码推迟到 onCreateView() 或更高版本。

关于java - 为什么我的 fragment 中的 Activity 上下文为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26656821/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com