目前,我正在将我的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。
发布于 2014-06-14 17:20:47
您必须添加一个带@AfterViews注释的方法,注入的View字段将在那里可用。在Fragment的情况下,AA在onViewCreated()方法中注入View字段。如果您想了解生命周期,请检查生成的类。
https://stackoverflow.com/questions/22847619
复制相似问题