Java 在我的setOnClick崩溃后,我删除了适配器中的一些项目
我试图在删除一些项目后显示listView。但是,在我删除了一些项目之后,OnItemClick崩溃(java.lang.IllegalStateException:适配器的内容已更改,但ListView未收到通知)。我想在删除后显示一个新列表,就像过滤器一样。我已经尝试使用adapter.remove(位置)和list.remove(位置),如下面的示例所示 我的麦克里克Java 在我的setOnClick崩溃后,我删除了适配器中的一些项目,java,android,Java,Android,我试图在删除一些项目后显示listView。但是,在我删除了一些项目之后,OnItemClick崩溃(java.lang.IllegalStateException:适配器的内容已更改,但ListView未收到通知)。我想在删除后显示一个新列表,就像过滤器一样。我已经尝试使用adapter.remove(位置)和list.remove(位置),如下面的示例所示 我的麦克里克 //listView.invalidateViews();
//listView.invalidateViews();
//listView.refreshDrawableState();
//pullToRefresh.setRefreshing(false);
Collections.sort(lista, new Viagem());
adapter.notifyDataSetChanged();
System.out.println(position);
Viagem vg = (Viagem) parent.getItemAtPosition(position);
Bundle bundle = new Bundle();
bundle.putString("usuario", usuario);
bundle.putString("usuarioViagem", vg.getUsuario());
bundle.putString("data", vg.getData());
bundle.putString("hora", vg.getHora());
Intent intent = new Intent(getApplicationContext(), MostraInfoViagemActivity.class);
intent.putExtras(bundle);
startActivity(intent);
}
});
我是如何删除一些项目的
public void delete(){
jaEntrou = false;
ArrayList <Integer> apagar = new ArrayList<>();
Viagem aux;
List<String> listaUsuarios;
for(int i = 0 ; i < lista.size(); i++){
jaEntrou = false;
aux = lista.get(i);
listaUsuarios = aux.getUsuarios();
for(int j = 0; j < listaUsuarios.size(); j++){
if(listaUsuarios.get(j).equals(usuario)){
jaEntrou = true;
}
}
if(!jaEntrou){
apagar.add(i);
}
}
for(int i = apagar.size() - 1; i >= 0; i--){
int index = apagar.get(i);
lista.remove(index);
//adapter.removeItem(apagar.get(i));
//adapter.notifyDataSetChanged();
}
adapter.notifyDataSetChanged();
listView.invalidateViews();
listView.refreshDrawableState();
lista = fb.getLista();
Intent intent = new Intent(getApplicationContext(), OnlyDelay.class);
startActivity(intent);
}
public void delete(){
jaEntrou=假;
ArrayList apagar=新的ArrayList();
维亚吉姆奥克斯;
列表Ausuarios;
对于(int i=0;i=0;i--){
int index=apagar.get(i);
删除(索引);
//adapter.removietem(apagar.get(i));
//adapter.notifyDataSetChanged();
}
adapter.notifyDataSetChanged();
listView.invalidateViews();
listView.refreshDrawableState();
lista=fb.getLista();
Intent Intent=newintent(getApplicationContext(),OnlyDelay.class);
星触觉(意向);
}
我的自定义列表
package com.example.caronassuldeminas;
import android.app.Activity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import java.util.List;
public class Custom_List extends BaseAdapter {
private List<Viagem> viagens;
private Activity act;
private Object orig;
public Custom_List(List<Viagem> viagens, Activity act){
this.viagens = viagens;
this.act = act;
}
@Override
public int getCount() {
return viagens.size();
}
@Override
public Object getItem(int position) {
return viagens.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
public void removeItem(int position){
viagens.remove(position);
}
public void attLista(List<Viagem> viagens){
this.viagens = viagens;
}
public Viagem getViagem(int position){
return viagens.get(position);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = act.getLayoutInflater().inflate(R.layout.list_item, parent, false);
TextView cidadePartida = (TextView) view.findViewById(R.id.textView8);
TextView cidadeChegada = (TextView) view.findViewById(R.id.textView9);
TextView dia = (TextView) view.findViewById(R.id.textView10);
TextView hora = (TextView) view.findViewById(R.id.textView11);
cidadePartida.setText(viagens.get(position).getCidadePartida());
cidadeChegada.setText(viagens.get(position).getCidadeChegada());
dia.setText("Dia: " + viagens.get(position).getData());
hora.setText("Hora: " + padronizaHora(viagens.get(position).getHora()) + "h");
return view;
}
public String padronizaHora(String data){
if(data.length() == 5)
return data;
int pos = 0;
String resu = "";
for(int i = 0; i < data.length(); i++){
if(data.charAt(i) == ':'){
pos = i;
break;
}
}
if(pos < 2){
resu += "0";
}
resu += data.substring(0, pos);
resu += ":";
if(data.charAt(data.length()-1) == '0'){
resu += "0";
}
resu += data.substring(pos + 1);
return resu;
}
}
package com.example.caronassuldeminas;
导入android.app.Activity;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.BaseAdapter;
导入android.widget.TextView;
导入java.util.List;
公共类自定义\u列表扩展BaseAdapter{
私人名单维亚根斯;
私人活动法;
私人物品来源;
公共定制清单(清单viagens,活动法){
this.viagens=viagens;
this.act=act;
}
@凌驾
public int getCount(){
返回viagens.size();
}
@凌驾
公共对象getItem(int位置){
返回viagens.get(位置);
}
@凌驾
公共长getItemId(int位置){
返回0;
}
公共无效删除项(内部位置){
过孔。移除(位置);
}
公共无效attLista(列表viagens){
this.viagens=viagens;
}
公共Viagem getViagem(内部位置){
返回viagens.get(位置);
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图=act.getLayoutFlater().充气(R.layout.list_项,父项,false);
TextView cidepartida=(TextView)view.findViewById(R.id.textView8);
TextView ciadechegada=(TextView)view.findViewById(R.id.textView9);
TextView dia=(TextView)view.findViewById(R.id.textView10);
TextView hora=(TextView)view.findViewById(R.id.textView11);
cidepartida.setText(viagens.get(position.getcidepartida());
cidadeChegada.setText(viagens.get(position.getCidadeChegada());
dia.setText(“dia:+viagens.get(position.getData());
hora.setText(“hora:+padronizaHora(viagens.get(position.getHora())+“h”);
返回视图;
}
公共字符串padronizaHora(字符串数据){
if(data.length()==5)
返回数据;
int pos=0;
字符串resu=“”;
对于(int i=0;i
通常,当我从驱动ListView和适配器的ArrayList中添加或删除项目时,我会重新创建适配器并将其重新分配给ListView,而不是调用notifyDatasetChanged。这似乎还可以防止任何崩溃,而崩溃很可能是由适配器试图引用不再存在的ArrayList元素引起的
adapter = new TripSelectAdapter(this, thisContext, tripItems);
mTripList.setAdapter(adapter);
张贴您的碰撞日志可能重复的