Android 非法状态异常:适配器的内容已更改,但ListView未收到通知
我有两个ListView,第二个视图项根据第一个用户在第一个ListView中选择的内容进行更改 当用户首先从第一个列表中选择一个项目时,第二个ListView将毫无问题地加载。。。但是当返回到第一个ListView,选择另一项时,第二个ListView会给出非法状态异常 我不知道什么时候通知ListView有关DataSetChanges,因为在setListAdapter之前或之后通知它是没有意义的Android 非法状态异常:适配器的内容已更改,但ListView未收到通知,android,listview,illegalstateexception,Android,Listview,Illegalstateexception,我有两个ListView,第二个视图项根据第一个用户在第一个ListView中选择的内容进行更改 当用户首先从第一个列表中选择一个项目时,第二个ListView将毫无问题地加载。。。但是当返回到第一个ListView,选择另一项时,第二个ListView会给出非法状态异常 我不知道什么时候通知ListView有关DataSetChanges,因为在setListAdapter之前或之后通知它是没有意义的 public void onCreate(Bundle savedInstanceState
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;
}
}
公共类mListAdapter扩展BaseAdapter{
私有静态ArrayList ArrayList;
私人停车场;
语境;
int文本大小;
公共mListAdapter(上下文m_上下文、ArrayList结果、int mTextSize){
arrayList=结果;
mInflater=LayoutInflater.from(m_上下文);
上下文=m_上下文;
textSize=mTextSize;
}
public int getCount(){
返回arrayList.size();
}
公共对象getItem(int位置){
返回arrayList.get(位置);
}
公共长getItemId(int位置){
返回位置;
}
公共视图getView(int位置、视图转换视图、视图组父视图){
视窗座;
if(convertView==null){
convertView=mInflater.充气(R.layout.custom_行,空);
holder=新的ViewHolder();
holder.mainItem=(TextView)convertView.findViewById(R.id.row\u txt\u main);
convertView.setTag(支架);
}否则{
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\u UNIT\u DIP,textSize);
holder.mainItem.setTypeface(字体);
返回视图;
}
静态类视窗夹{
文本视图主项;
}
}
在中声明ArrayList时,我刚刚删除了“static”
private static ArrayList<mItemsHolder> arrayList;
私有静态ArrayList ArrayList;
在中声明ArrayList时,我刚刚删除了“static”
private static ArrayList<mItemsHolder> arrayList;
私有静态ArrayList ArrayList;
当我返回时,必须销毁第二个列表活动;为什么在重新创建时,系统认为数据集已更改?添加了custome ListAdapter类,这似乎是问题所在。。。知道发生了什么吗?!当我返回时,第二个列表活动必须被销毁;为什么在重新创建时,系统认为数据集已更改?添加了custome ListAdapter类,这似乎是问题所在。。。知道发生了什么吗?!非常感谢您的回答我通过移除静电解决了问题非常感谢您的回答我通过移除静电解决了问题