我发现了使用两个不同设备(ICS和Kitkat)的findViewById方法的奇怪行为。我正在使用包含自定义支持片段的片段活动。使用Android FragmentTransation添加片段。
FragmentActivity中的初始化:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.voting_list_activity);
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.add(R.id.activity_layout, new CustomFragment());
transaction.commit();
}
现在我在Fragments onCreate方法中扩充布局并初始化ui引用。这适用于设备和Android版本。
支持V4片段中的初始化:
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_layout, container, false);
initUiReferences(view);
return view;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.fragment_menu, menu);
super.onCreateOptionsMenu(menu, inflater);
}
但现在我面临的问题是我无法在Android Kitkat上使用findViewById()找到对操作栏项的引用。在Android Ice Cream Sandwich上,此调用返回操作项的正确视图,但在KitKat上它返回null。
任何建议。在此先感谢
修改 这是initUiReferences。它只初始化片段中的列表视图。
private void initUiReferencesView(View view) {
mListView = (ListView) view.findViewById(R.id.list_view);
mListView...
// This call always returns null on Kitkat
View actionItem = view.findViewById(R.id.action_item);
}
在片段元素上调用findViewById没有任何问题,但是当我尝试查找操作栏项时,它返回null。我也尝试在onResume
或onViewCreated
中找到引用,但它并没有解决问题。操作栏项目显示在显示屏上并正常工作。