ListFragment
我的Android应用程式中有一个自定义的怪异问题。我有一个自定义的风俗ArrayAdapter
,listView
除此以外,LoaderManager
我还headerView
附有:
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
setListAdapter(null);
}
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (getListView().getHeaderViewsCount() <= 0 && headerView != null)
getListView().addHeaderView(headerView, null, false);
if (listAdapter == null)
listAdapter = new DataAdapter(getActivity(), R.id.label1,
(CategoryModel) getArguments().getParcelable(MODEL_KEY));
setListAdapter(listAdapter);
setListShown(false);
getLoaderManager().initLoader(0, null, this);
}
private final static class DataAdapter extends ArrayAdapter<ICatalogModel> {
private final LayoutInflater inflater;
private final CategoryModel parentModel;
private CustomArrayFilter filter;
public DataAdapter(Context c, int textViewResourceId,
CategoryModel parentModel) {
super(c, textViewResourceId);
this.parentModel = parentModel;
inflater = LayoutInflater.from(c);
}
@Override
public boolean areAllItemsEnabled() {
return true;
}
@Override
public boolean isEnabled(int position) {
return true;
}
public ArrayList<ICatalogModel> getData() {
return originalValues;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
ItemHolder holder;
if (v == null) {
v = inflater.inflate(R.layout.rooms_list_row, parent, false);
holder = new ItemHolder();
holder.nameField = (TextView) v.findViewById(R.id.label1);
v.setTag(holder);
}
holder = (ItemHolder) v.getTag();
final ICatalogModel model = getItem(position);
holder.nameField.setText(model.getName());
return v;
}
public void addAllSupport(ArrayList<ICatalogModel> data) {
for (ICatalogModel p : data) {
add(p);
}
notifyDataSetChanged();
}
}
在onLoaderReset
我试图通过调用清除适配器数据的方法上,myAdapter.clear()
但是在126行IndexOutOfBounds
的androidHeaderViewListAdapter
类中抛出了一个奇怪的异常:
@Override
public void onLoaderReset(Loader<ArrayList<ICatalogModel>> arg0) {
if (listAdapter != null) {
((DataAdapter) listAdapter).clear();
}
}
@Override
public void onLoadFinished(Loader<ArrayList<ICatalogModel>> arg0,
ArrayList<ICatalogModel> arg1) {
if (listAdapter != null) {
((DataAdapter) listAdapter).clear();
if (CokConstants.SUPPORTS_HONEYCOMB) {
((DataAdapter) listAdapter).addAll(arg1);
} else {
((DataAdapter) listAdapter).addAllSupport(arg1);
}
((DataAdapter) listAdapter).setOriginalValues(arg1);
}
if (isResumed())
setListShown(true);
else
setListShownNoAnimation(true);
}
我发现问题出在某种程度上与我没有删除方法headerView
上的事实有关onDestroyView
...我做到了...没有更多的例外...但是现在又有一个问题...每当我回到那个来自堆栈的片段...即使将数据正确添加到适配器中,该列表也不再可见。有人遇到过这个问题吗?
当您向其中添加页眉或页脚视图时ListView
;设置为它的适配器包装在中WrapperListAdapter
。您必须检查适配器的实例。
DataAdapter myExistingAdapter = null;
if(listAdapter instanceof WrapperListAdapter) {
myExistingAdapter = (DataAdapter)((WrapperListAdapter)listAdapter).getWrappedAdapter();
} else if (listAdapter instanceof DataAdapter) {
myExistingAdapter = (DataAdapter)listAdapter;
}
android.widget.WrapperListAdapter已知的间接子类HeaderViewListAdapter
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句