【问题标题】:Illegal State Exception: The content of the adapter has changed but ListView did not receive a notification非法状态异常:适配器的内容发生了变化但ListView没有收到通知
【发布时间】:2012-05-11 22:56:28
【问题描述】:

我有两个 ListView,第二个视图项根据第一个用户在第一个 ListView 中选择的内容而变化

当用户首先从第一个列表中选择一个项目时,第二个 ListView 加载没有问题......但是当返回第一个 ListView,选择另一个项目时,第二个 ListView 给出非法状态异常......

我不知道何时通知 ListView 有关 DataSetChanges,因为在 setListAdapter 之前或之后通知它没有意义!

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    int mIndex = getIntent().getIntExtra("mIndex", 0);

    adapter = new mListAdapter(this, getItems(mIndex));

    setListAdapter(adapter);

}

更新: 我更改了适配器类,问题就消失了……这是我的旧自定义类导致错误……知道它有什么问题吗?

mListAdapter 类

public class mListAdapter extends BaseAdapter {

private static ArrayList<mItemsHolder> arrayList;

private LayoutInflater mInflater;

Context context;
int textSize;

public mListAdapter (Context m_context, ArrayList<mItemsHolder> results, int mTextSize) {
    arrayList = results;
    mInflater = LayoutInflater.from(m_context);
    context = m_context;
    textSize = mTextSize;

}

public int getCount() {
    return arrayList.size();
}

public Object getItem(int position) {
    return arrayList.get(position);
}

public long getItemId(int position) {
    return position;
}

public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.custom_row, null);
        holder = new ViewHolder();
        holder.mainItem = (TextView) convertView.findViewById(R.id.row_txt_main);

        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();         
    }

    Typeface typeFace=Typeface.createFromAsset(context.getAssets(),"fonts/verdana.ttf");
    holder.mainItem.setText(arrayList.get(position).getMainItem());
    holder.mainItem.setTextSize(TypedValue.COMPLEX_UNIT_DIP, textSize);
    holder.mainItem.setTypeface(typeFace);
    return convertView;
}

static class ViewHolder {
    TextView mainItem;
}
}

【问题讨论】:

  • 当我回去的时候,必须销毁第二个列表活动;为什么重新创建时系统认为数据集已更改?
  • 添加了似乎是问题的客户 ListAdapter 类...知道发生了什么吗?!

标签: android listview illegalstateexception


【解决方案1】:

在声明我的 ArrayList 时,我刚刚删除了“静态”

private static ArrayList<mItemsHolder> arrayList;

【讨论】:

  • 非常感谢您的回答,我通过删除 static 解决了问题
猜你喜欢
  • 1970-01-01
  • 2014-06-21
  • 1970-01-01
  • 2015-05-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-24
  • 1970-01-01
相关资源
最近更新 更多