在BaseAdapter的getView()中出现问题,Viewholder为null

时间:2015-01-13 02:32:54

标签: android baseadapter getview

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder viewHolder;
    if (convertView == null) {
        convertView = LayoutInflater.from(mContext).inflate(
                R.layout.vote_select_listview_item, null);
        viewHolder = new ViewHolder(convertView);
        convertView.setTag(R.id.AnnouncementDetailVoteListViewAdapter_view,
                viewHolder);
    } else {
        viewHolder = (ViewHolder) convertView
                .getTag(R.id.AnnouncementDetailVoteListViewAdapter_view);
    }

convertView不为null但是viewholder为null因为我添加了一个新的数据调用notifyDataSetChanged,下一个动作是这样的:

            mVoteItems.add(response4.data);
            notice_vote_adapter.notifyDataSetChanged();
            viewHeightUtil.setListViewHeight(notice_vote_options_lv);

问题是我需要动态更改ListView高度,如果注释它那么没有问题,我在这里找到问题:

public void setListViewHeight(ListView listView) {
    ListAdapter listAdapter = listView.getAdapter();
    if (listAdapter == null) {
        return;
    }

    int totalHeight = 0;
    for (int i = 0; i < listAdapter.getCount(); i++) {
        View listItem = listAdapter.getView(i, null, listView);

        if (listItem instanceof ViewGroup) {
            listItem.setLayoutParams(new AbsListView.LayoutParams(
                    AbsListView.LayoutParams.WRAP_CONTENT,
                    AbsListView.LayoutParams.WRAP_CONTENT));
        }
        listItem.measure(0, 0);
        totalHeight += listItem.getMeasuredHeight();

    }

    ViewGroup.LayoutParams params = listView.getLayoutParams();
    params.height = totalHeight
            + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
    listView.setLayoutParams(params);
    listView.requestLayout();
}

1 个答案:

答案 0 :(得分:0)

if(convertView==null){
    LayoutInflater = (LayoutInflater) activity
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    viewholder =  inflater.inflate(R.layout.row, null);
}

试试这个