【发布时间】:2011-09-20 08:37:32
【问题描述】:
我正在尝试制作包含 0-2 个页眉和 0-1 个页脚的“动态”列表视图(基于所需的模式)。 如果我使用订单
getListView().addFooterView(footerView, null, true);
getListView().setAdapter(myAdapter);
我收到一个错误:
java.lang.NullPointerException
at android.widget.AdapterView$AdapterDataSetObserver.onChanged(AdapterView.java:778)
at android.widget.ListView.addFooterView(ListView.java:364)
at com.my.fragments.QuestionListFragment.updateList(QuestionListFragment.java:63)
如果我将线路切换到
getListView().setAdapter(myAdapter);
getListView().addFooterView(footerView, null, true);
没有错误,但模式更改时不会出现页脚视图(它会出现在下一次模式更改时,因此我认为代码正在运行)。
运行时此时footerView不为空
我不知道这里有什么问题,但我确实需要页眉和页脚作为列表视图的一部分(我可以使用 ScrollView 和单独的框架来实现,但那不行)
更新:要补充一点:列表中显示的数据正在异步加载并存储在单独的静态 ArrayList 中。我在加载开始时使用 setAdapter(null) 并在完成时使用 setAdapter(myAdapter) 来修改 ListView。也许问题就在这里?
更新2 view_question_list_footer.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_marginTop="2dip" android:layout_marginBottom="2dip">
<TextView android:textAppearance="?android:attr/textAppearanceSmall" android:layout_height="wrap_content"
android:layout_width="wrap_content" android:textStyle="bold" android:text="Load More Questions" android:gravity="center"
android:layout_gravity="center" android:lines="3" android:textColor="@android:color/white"></TextView>
</FrameLayout>
QuestionAdapter.java
public class QuestionAdapter extends BaseAdapter {
public class BrowseSettings {
public SortingMode sortingMode = SortingMode.SORT_BY_DATE;
public boolean isAnswered = true;
public int categoryFilter = -1;
public String textFilter = null;
}
private LayoutInflater inflater = null;
private BrowseSettings settings = new BrowseSettings();
private LoaderListener loaderListener = null;
public QuestionAdapter(Context context, LoaderListener listener) {
inflater = LayoutInflater.from(context);
loaderListener = listener;
}
private void loadData() {
QAData.questions.clear();
appendData();
}
public void appendData() {
new QuestionLoaderThread(settings.isAnswered, settings.sortingMode, settings.categoryFilter, settings.textFilter,
QAData.questions.getCount(), BaseRequest.DEFAULT_COUNT_VALUE, loaderListener).start();
}
public void applyCategoryFilter(int filter) {
settings.categoryFilter = filter;
loadData();
}
public void applyTextFilter(String filter) {
settings.textFilter = filter;
loadData();
}
@Override
public int getCount() {
return QAData.questions.getCount();
}
@Override
public Object getItem(int position) {
return QAData.questions.get(position);
}
@Override
public long getItemId(int position) {
return QAData.questions.get(position).getId();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
QuestionViewHolder viewHolder = null;
if(convertView == null) {
convertView = inflater.inflate(R.layout.view_question, null);
viewHolder = new QuestionViewHolder();
viewHolder.content = (TextView) convertView.findViewById(R.id.QuestionContent);
viewHolder.likes = (TextView) convertView.findViewById(R.id.QuestionLikeCounter);
viewHolder.question = QAData.questions.get(position);
convertView.setTag(viewHolder);
} else {
viewHolder = (QuestionViewHolder) convertView.getTag();
}
viewHolder.content.setText(Html.fromHtml(viewHolder.question.getFormattedQuestion()));
viewHolder.likes.setText(String.valueOf(viewHolder.question.getLikesCount()));
return convertView;
}
private class QuestionViewHolder {
private TextView content;
private TextView likes;
private QAQuestion question;
}
}
【问题讨论】:
-
请包含
view_question_list_footer.xml的XML 和myAdapter的代码..
标签: java android exception listview footer