目前我正在将我的android项目移动到android-annotations。我很难理解调用注释的顺序。由于错误的序列,我得到nullPointerExceptions。
作为示例用例,我试图在Fragment中使用@ViewById。但是我在onCreateView()和onResume()中得到nullPointerException。
解释活动生命周期中的哪个时间,将触发哪个注释的文档将非常有用。
以下是我的代码的一小部分: -
@EFragment
public class DiscoverFragment extends Fragment {
@ViewById(R.id.dishList)
PullToRefreshListView mPullToRefreshView;
@ViewById
LinearLayout noDataAvailable;
@ViewById
LinearLayout dataAvailable;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Log.d(TAG, "onCreateView");
View v = inflater.inflate(R.layout.fragment_discover, container, false);
if (cursorStringDistance == null) {
mPullToRefreshView.setMode(Mode.PULL_FROM_START);
mPullToRefreshView.setOnRefreshListener(oneRefresher);
} else {
mPullToRefreshView.setMode(Mode.BOTH);
mPullToRefreshView.setOnRefreshListener(bothRefresher);
}
ListView actualListView = mPullToRefreshView.getRefreshableView();
actualListView.setAdapter(mAdapter);
return v;
}
@Override
public void onResume() {
super.onResume();
if (dishListDistance.size() == 0) {
noDataAvailable.setVisibility(View.VISIBLE);
dataAvailable.setVisibility(View.GONE);
} else {
noDataAvailable.setVisibility(View.GONE);
dataAvailable.setVisibility(View.VISIBLE);
}
startTime = System.currentTimeMillis();
}
}
我为行mPullToRefreshView.setMode(Mode.PULL_FROM_START);
和noDataAvailable.setVisibility(View.VISIBLE);
收到nullPointerException。
答案 0 :(得分:1)
您必须添加@AfterViews
带注释的方法,注入的View
字段将在那里可用。如果Fragment
AA注入View
方法中的onViewCreated()
字段。如果您想了解生命周期,请检查生成的类。