Partage
  • Partager sur Facebook
  • Partager sur Twitter

Trier une ListView

    13 février 2019 à 11:12:41

    Bonjour à tous,

    Voila je débute dans le développement android et je bloque sur un point. J'ai créé une application pour gérer le stock dans mon congélateur. Pour cela j'utilise une ListView que j'alimente via un RadioButton, un ImageButton et un EditText.

    Je me suis inspiré du net pour alimenter ma ListView (et le code fonctionne très bien), or impossible de trouver un code qui s'adapte pour le tri (Je voudrais trier soit sur le congélateur, soit sur l'image) :/

    Ayant pioché des bouts de code sur le net, j'admets ne pas avoir tout compris au bout de code, et je pense que c'est pour cela que ça coince concernant le tri. Je me demande si ma méthode pour alimenter ma ListView et "triable".

    Voici mon code (j'ai retiré les imports) :

    public class MainActivity extends AppCompatActivity {
    
        private ListView maListe;
        private EditText input;
        private TextView output;
        HashMap<String,String> map;
        SimpleAdapter tr;
        private ImageButton viande;
        private ImageButton pain;
        private ImageButton glace;
        private ImageButton legume;
        private ImageButton pizza;
        private String testclic;
        private RadioGroup choixCongel;
        private String choixDuCongel;
        private RadioButton grosCongel;
        private RadioButton petitCongel;
        private Button add;
        private Button tri;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            //On associe nos éléments graphiques au code
            maListe = (ListView)findViewById(R.id.liste);
            add=(Button)findViewById(R.id.Ajouter);
            tri=(Button)findViewById(R.id.Tri);
            input=(EditText)findViewById(R.id.input);
            output=(TextView)findViewById(R.id.output);
            viande=(ImageButton)findViewById(R.id.viande);
            pain=(ImageButton)findViewById(R.id.pain);
            legume=(ImageButton)findViewById(R.id.legume);
            pizza=(ImageButton)findViewById(R.id.pizza);
            glace=(ImageButton)findViewById(R.id.ice);
            choixCongel=(RadioGroup)findViewById(R.id.liste_congel);
            grosCongel=(RadioButton)findViewById(R.id.grand_congel);
            petitCongel=(RadioButton)findViewById(R.id.petit_congel);
    
            //Création dela ArrayList qui va nous permettre de remplir la listView
            final ArrayList<HashMap<String,String>> listItem = new ArrayList<HashMap<String,String>>();
    
            //Création d'un SimpleAdapter qui se chargera de mettre les items présent dans notre list (listItem) dans la vue list_view.xml
            tr = new SimpleAdapter(this,listItem,R.layout.list_view,new String[]{"image","nom","congel"},new int[] {R.id.image,R.id.nom,R.id.congel});
    
            add.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (input.length() == 0) {
                        Toast.makeText(MainActivity.this, "Vous n'avez pas renseigné de nom d'aliment", Toast.LENGTH_LONG).show();
                        return;
                    }
                    if (petitCongel.isChecked() == false && grosCongel.isChecked() == false){
                        Toast.makeText(MainActivity.this, "Vous n'avez pas choisi de congélateur", Toast.LENGTH_LONG).show();
                        return;
                    }
                    if (choixCongel.getCheckedRadioButtonId() == R.id.grand_congel)
                        choixDuCongel = "Grand congélateur";
                    if (choixCongel.getCheckedRadioButtonId() == R.id.petit_congel)
                        choixDuCongel = "Petit congélateur";
                    map = new HashMap<String, String>();
                    map.put("nom", input.getText().toString());
                    map.put("congel",choixDuCongel);
                    if (testclic=="viande")
                        map.put("image",String.valueOf((R.drawable.viande)));
                    if (testclic=="glace")
                        map.put("image",String.valueOf((R.drawable.ice)));
                    if (testclic=="pain")
                        map.put("image",String.valueOf((R.drawable.pain)));
                    if (testclic=="legume")
                        map.put("image",String.valueOf((R.drawable.legume)));
                    if (testclic=="pizza")
                        map.put("image",String.valueOf((R.drawable.pizza)));
                    listItem.add(map);
                    maListe.setAdapter(tr);
                    output.setText(testclic);
                    choixCongel.clearCheck();
                }
            });
    
            tri.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //code pour le tri par "image"
    
                }
            });
        }
    }
    

    Et voici les 2 fichiers xml associés : 
    Activity_main

    <?xml version="1.0" encoding="utf-8"?>
    
    <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <LinearLayout>
            <ImageButton
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/viande"
                android:layout_weight="1"
                android:id="@+id/viande" />
    
            <ImageButton
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/legume"
                android:layout_weight="1"
                android:id="@+id/legume" />
            <ImageButton
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/pain"
                android:layout_weight="1"
                android:id="@+id/pain" />
            <ImageButton
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/pizza"
                android:layout_weight="1"
                android:id="@+id/pizza" />
            <ImageButton
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/ice"
                android:layout_weight="1"
                android:id="@+id/ice" />
        </LinearLayout>
    
        <LinearLayout>
        <View
            android:layout_width="wrap_content"
            android:layout_height="4dip"
            android:background="#FF909090"
            android:layout_weight="1"
            android:id="@+id/barre1"/>
    
            <View
                android:layout_width="wrap_content"
                android:layout_height="4dip"
                android:background="#FF909090"
                android:layout_weight="1"
                android:id="@+id/barre2"/>
    
            <View
                android:layout_width="wrap_content"
                android:layout_height="4dip"
                android:background="#FF909090"
                android:layout_weight="1"
                android:id="@+id/barre3"/>
    
            <View
                android:layout_width="wrap_content"
                android:layout_height="4dip"
                android:background="#FF909090"
                android:layout_weight="1"
                android:id="@+id/barre4"/>
    
            <View
                android:layout_width="wrap_content"
                android:layout_height="4dip"
                android:background="#FF909090"
                android:layout_weight="1"
                android:id="@+id/barre5"/>
        </LinearLayout>
    
    
        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/input"
            android:hint="Nom de l'élément à ajouter"/>
    
        <RadioGroup
            android:id="@+id/liste_congel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            >
            <RadioButton
                android:id="@+id/grand_congel"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Grand congélateur"
                />
            <RadioButton
                android:id="@+id/petit_congel"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Petit congélateur"
                />
        </RadioGroup>
    
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/output"
            android:hint="Zone de test"/>
    
        <Button
            android:id="@+id/Ajouter"
            android:layout_width="wrap_content"
            android:layout_height="70dip"
            android:text="+" />
    
        <Button
            android:id="@+id/Tri"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Tri" />
    
        <ListView
            android:id="@+id/liste"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:dividerHeight="1dip" />
    
    </TableLayout>

    Template pour ma ListView :

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        >
    
        <ImageView
            android:id="@+id/image"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:padding="10px"
            />
    
        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:orientation="vertical"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:paddingLeft="10px"
            android:layout_weight="1"
            >
    
            <TextView android:id="@+id/nom"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                />
            <TextView android:id="@+id/congel"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                />
    
        </LinearLayout>
    
    </LinearLayout>
    				

    Et voici un aperçu visuel si besoin :

    Avez vous une solution à mon problème ?

    • Partager sur Facebook
    • Partager sur Twitter

    Trier une ListView

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown