Supprimer l'élément de la GridView
Je suis très nouveau à développement android et j'ai l'impression que c'est très simple, et pourtant, je n'ai pas réussi à trouver quelqu'un sur google avec le même problème.
J'ai un Gridview qui est rempli avec un TextView (qui a une image sur le dessus) et un ImageButton (pour supprimer l'élément en cours). Ce que je veux faire est de supprimer l'élément de qui je clique sur le ImageButton.
Ici est ma Principale :
public class ActivityMain extends Activity
{
GridView gridview;
public GridAdapter mainActivityAdapter;
public ArrayList<String> listService = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listService.add("Market");
listService.add("Recherche");
listService.add("Quiz");
gridview = (GridView) findViewById(R.id.mainActivity_grid);
mainActivityAdapter = new GridAdapter(this.getApplicationContext(), listService);
gridview.setAdapter(mainActivityAdapter);
}
}
Et voici ma Carte :
public class GridAdapter extends BaseAdapter
{
Context context;
ArrayList<String> list = new ArrayList<String>();
GridAdapter adapter = this;
public GridAdapter(Context context, ArrayList<String> list)
{
this.context = context;
this.list = list;
}
@Override
public int getCount()
{
return list.size();
}
@Override
public Object getItem(int arg0)
{
return null;
}
@Override
public long getItemId(int arg0)
{
return 0;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent)
{
ViewHolder holder;
if(convertView==null)
{
convertView = LayoutInflater.from(context).inflate(R.layout.item_gridmain, null);
holder = new ViewHolder();
holder.textView = (TextView) convertView.findViewById(R.id.gridMain_text);
holder.close = (ImageButton) convertView.findViewById(R.id.mainActivity_delete);
convertView.setTag(holder);
}
else{
holder = (ViewHolder) convertView.getTag();
}
//Doing stuff on views
holder.close.setOnClickListener(new View.OnClickListener()
{
public void onClick(View arg1)
{
//list.remove(position);
list.remove(position);
adapter.notifyDataSetChanged();
}
});
return convertView;
}
public static class ViewHolder
{
TextView textView;
ImageButton close;
}
}
Le truc, c'est que lorsque je clique sur un ImageButton, c'est toujours le dernier élément qui a été ajouté en cours de suppression et je ne peux pas comprendre pourquoi ou comment résoudre ce problème.
Merci.
==================
EDIT :
Voici mon activity_main.xml :
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main_layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#DDDDDD"
android:orientation="vertical" >
<GridView
android:id="@+id/mainActivity_grid"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginLeft="5sp"
android:layout_marginRight="5sp"
android:layout_marginTop="5sp"
android:clickable="false"
android:gravity="center"
android:horizontalSpacing="15dp"
android:numColumns="2"
android:stretchMode="columnWidth"
android:verticalSpacing="10dp" />
</LinearLayout>
Et mon item_gridmain.xml :
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/gridMain_text"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_gravity="center"
android:textAlignment="center"
android:textColor="@android:color/holo_blue_dark"
/>
<ImageButton
android:id="@+id/mainActivity_delete"
style="?android:attr/borderlessButtonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:contentDescription="@string/deleteFav"
android:src="@drawable/boutoncroixfermer" />
</RelativeLayout>
OriginalL'auteur P.h. Dvrgne | 2013-07-23
Vous devez vous connecter pour publier un commentaire.
Vous avez ImageButton dans chaque élément de droit? Vous pouvez définir
Et puis, vous avez toutes les positions cachées dans les boutons à droite.Modifier la OnClickListener comme ci-dessous:
Ne liste.supprimer(0) supprimer un élément de la liste?
Oui, il supprime le premier élément de la liste, mais le dernier sur la grille
OriginalL'auteur tasomaniac
Ok en fait c'était de ma faute et je me sens incroyablement stupide maintenant.
J'ai été vraiment supprimer l'élément de droite, mais dans chaque vue, j'ai été remplaçant chaque élément à position avec ce qui était là en premier lieu. De sorte que chaque élément était la bonne, mais l'image/texte de l'ancienne parce que j'ai été de les modifier à l'intérieur de getView().
Désolé pour cette perte de temps, mon mal, j'ai envie de frapper moi-même maintenant.
J'ai changé ma façon de définir le texte et l'image de chaque élément. En fait j'ai été "codage en dur" (je ne sais pas si c'est correct en anglais) de chaque élément (par exemple en position 0 et que la position 1 sera ceci et cela). C'est évidemment une mauvaise idée car il va vous montrer que vous supprimez un élément, mais vous ne savez pas avec certitude qui vous avez supprimé (je ne sais pas si c'est clair, dites-moi si vous ne comprenez pas).
OriginalL'auteur P.h. Dvrgne
Veuillez utiliser ViewHolder modèle, et également ajouter vos gridMain_text.xml
sinon vous continuez à recevoir des mauvais indice de cliquez sur
http://www.binpress.com/tutorial/smooth-out-your-listviews-with-a-viewholder/9
C'est l'exemple de la ListView, mais également applicable pour
GridView
veuillez voir ma réponse
OriginalL'auteur Yahya Arshad
Veuillez utiliser
au lieu de les fermer.setOnClickListener, j'ai couru votre ce code un maintenant il fonctionne bien
j'ai couru votre code dans le simulateur , et il fonctionne très bien,,, s'il vous plaît essayer de désinstaller votre ancienne application à partir de votre mobile/simulateur et exécuter le nettoyage et re-installer
Eh bien, je ne sais pas. J'ai supprimé l'application de mon téléphone, nettoyer puis réinstaller et rien n'a changé. J'ai aussi essayé sur un autre téléphone et le même problème est toujours là : si vous souhaitez supprimer le 1er élément de la grille, le premier élément est supprimé de la liste, mais nous allons voir le dernier élément de disparaître de la gridview, au lieu de la première. En fait, je me demandais si le problème ne vient pas de ce que je fais sur chaque élément à l'intérieur de getView() (changement de textView les specs). Je vais essayer de le que la première chose demain et je vous tiendrai au courant.
OriginalL'auteur Yahya Arshad
ajouter du Journal.debug() à l'auditeur de s'assurer de la suppression de la position est droite.
Comment savez-vous après le clic,le dernier élément est supprimé?Je veux dire,si il y a des étiquettes de texte en vue de poste?Peut-être que vous retirez l'élément de droite,mais après gridview d'actualisation,il semble que le dernier élément est supprimé.
Vous pouvez ajouter la position de l'étiquette avec setText dans getView.Qui pourraient vous aide.
Ok,je sais.Où avez-vous à ne rendre point de vue?Vous devez le faire dans getView.L'AdapterView mis en cache, il est le point de vue.Comme vous avez supprimé la bonne position.Peut-être la position n'est pas la vue de droite.Vous pouvez exécuter hierarchyviewer pour détecter ce qui se passe.
OriginalL'auteur user890973