J'ai essayé beaucoup de choses pour résoudre ce problème et chercher la solution pendant des heures, j'ai besoin d'aide avec ceci. J'ai un listview, en important des données de MySQL et en récupérant des données dans Listview. Mon problème: les éléments dupliqués listview (Seulement les 20 premiers, puis j'utilise "loadmoredata" et je reçois sur le défilement downn 20 nouveaux éléments, mais pas plus d'éléments en double à nouveau). Ainsi, la première fois que je vois 40 articles (20 répétés).Comment puis-je supprimer des éléments en double dans ArrayList <Object> avec LinkedHashSet?
J'ai essayé LinkedHashSet mais je ne peux pas obtenir cela fonctionne. Aucune suggestion?
private ArrayList<Usuarios> items;
private Set<Usuarios> set;
private ArrayList<Usuarios> newList;
Activity activity;
Usuarios_adapter adapter;
...
listView = (ListView) findViewById(R.id.listView);
listView.setOnItemClickListener(this);
activity=this;
items=new ArrayList<Usuarios>();
set = new LinkedHashSet<Usuarios>(items);
newList = new ArrayList<Usuarios>(set);
adapter=new Usuarios_adapter(activity,newList);
listView.setAdapter(adapter);
//more code here
}
class BackTask extends AsyncTask<Void,Void,Void>{
protected void onPreExecute(){
super.onPreExecute();
listView.addFooterView(footerView);
}
protected Void doInBackground(Void...params) {
HashMap<String,String> params2 = new HashMap<>();
params2.put(Config.TAG_PESO,lastpeso2);
RequestHandler rh = new RequestHandler();
String s = rh.sendPostRequest(Config.URL_GET_ALL3, params2);
JSON_STRING = s;
JSONObject jsonObject = null;
try {
if(isLoadMore){
isLoadMore = false; }
jsonObject = new JSONObject(JSON_STRING);
JSONArray result = jsonObject.getJSONArray(Config.TAG_JSON_ARRAY);
for (int i = 0; i < result.length(); i++) {
JSONObject jo = result.getJSONObject(i);
String id = String.valueOf(jo.getInt(Config.TAG_ID));
String nombre = jo.getString(Config.TAG_NOMBRE);
String email = jo.getString(Config.TAG_EMAIL);
String foto = jo.getString(Config.TAG_FOTO);
String peso = jo.getString(Config.TAG_PESO);
String vasos = jo.getString(Config.TAG_VASOS);
String seguimiento = jo.getString(Config.TAG_SEGUIMIENTO);
String aplausos = jo.getString(Config.TAG_APLAUSOS);
String followers = jo.getString(Config.TAG_FOLLOWERS);
Usuarios user = new Usuarios(id, nombre, email, foto, peso, vasos, seguimiento ,aplausos, followers);
//items.add(user); //this would be the original, who give me duplicated items
newList.add(user);//this is the second arraylist
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
protected void onPostExecute(Void result){
listView.removeFooterView(footerView);
adapter.notifyDataSetChanged();
}
}
BackTask bt = new BackTask();
bt.execute();
EDIT: Avec @Japu_D_Cret modification
private ArrayList<Usuarios> items;
private Activity activity;
private Usuarios_adapter adapter;
.....
activity=this;
items=new ArrayList<Usuarios>();
adapter=new Usuarios_adapter(activity,items);
listView.setAdapter(adapter);
....
Set<Usuarios> set = new HashSet<>(items);
for (int i = 0; i < result.length(); i++) {
JSONObject jo = result.getJSONObject(i);
String id = String.valueOf(jo.getInt(Config.TAG_ID));
String nombre = jo.getString(Config.TAG_NOMBRE);
String email = jo.getString(Config.TAG_EMAIL);
String foto = jo.getString(Config.TAG_FOTO);
String peso = jo.getString(Config.TAG_PESO);
String vasos = jo.getString(Config.TAG_VASOS);
String seguimiento = jo.getString(Config.TAG_SEGUIMIENTO);
String aplausos = jo.getString(Config.TAG_APLAUSOS);
String followers = jo.getString(Config.TAG_FOLLOWERS);
Usuarios user = new Usuarios(id, nombre, email, foto, peso, vasos, seguimiento ,aplausos, followers);
//items.add(user);
set.add(user);
}
//clear the list, so no duplicates occurr
items.clear();
//copy the temporary set to the items
items.addAll(set);
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
Et ceci est mon getView
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
LayoutInflater inflator = activity.getLayoutInflater();
convertView = inflator.inflate(R.layout.b_server_list_item, null);
holder = new ViewHolder();
holder.id = (TextView) convertView.findViewById(R.id.id);
holder.email = (TextView) convertView.findViewById(R.id.list_email);
holder.nombre = (TextView) convertView.findViewById(R.id.Nombre);
holder.peso = (TextView) convertView.findViewById(R.id.Peso);
holder.vasos = (TextView) convertView.findViewById(R.id.Vasos);
holder.seguimiento = (TextView) convertView.findViewById(R.id.Seguimiento);
holder.followers = (TextView) convertView.findViewById(R.id.tv_followers);
holder.aplausos = (TextView) convertView.findViewById(R.id.tv_aplausos);
holder.picture = (ImageView) convertView.findViewById(R.id.foto_profile);
holder.foto_id = (TextView) convertView.findViewById(R.id.foto_id);
holder.rank = (TextView) convertView.findViewById(R.id.Rank);
holder.picture = (ImageView) convertView.findViewById(R.id.foto_profile);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.id.setText(items.get(position).getId());
holder.email.setText(items.get(position).getEmail());
holder.nombre.setText(items.get(position).getNombre());
holder.peso.setText(items.get(position).getPeso());
holder.vasos.setText(items.get(position).getVasos());
holder.seguimiento.setText(items.get(position).getSeguimiento());
holder.followers.setText(items.get(position).getFollowers());
holder.aplausos.setText(items.get(position).getAplausos());
holder.foto_id.setText(items.get(position).getFoto());
final int pos = position+1;
holder.rank.setText("" + pos);
String fotoid = holder.foto_id.getText().toString();
if(fotoid.contains("avatar_a")){holder.picture.setImageResource(R.drawable.avatar_a);}
if(fotoid.contains("avatar_b")){holder.picture.setImageResource(R.drawable.avatar_b);}
return convertView;
}
vous n'utilisez pas l'ensemble. vous copiez le contenu dans newList, mais ne l'utilisez pas réellement. voir ma réponse ci-dessous –
si votre question est répondue, s'il vous plaît marquer la réponse –