J'ai un projet dans le studio Android avec une liste personnalisée. ma listview personnalisée contient 2textbox et un commutateur et un bouton d'image, mais je ne peux pas savoir comment définir onclicklistener ou un autre écouteur pour eux dans la classe listadapter

Voici mon listadapter:

public class listadapter extends ArrayAdapter {
    Context context_;
    int resource_;
    ArrayList<reminders> objects_;
    boolean bool;
    DBAdapter db;

    public listadapter(Context context, int resource, ArrayList<reminders> objects) {
        super(context, resource, objects);
        context_ = context;
        resource_ = resource;
        objects_ = objects;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) context_.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View ViewRow = inflater.inflate(R.layout.reminders_list_layout, parent, false);
        TextView nametxt, addresstxt;
        Switch sw;
        ImageView imgview;
        nametxt = (TextView) ViewRow.findViewById(R.id.remindername);
        addresstxt = (TextView) ViewRow.findViewById(R.id.reminderaddress);
        sw = (Switch) ViewRow.findViewById(R.id.remindersw);
        imgview = (ImageView) ViewRow.findViewById(R.id.imageView4);
        nametxt.setText(objects_.get(position).name);
        addresstxt.setText(objects_.get(position).address);
        bool = (objects_.get(position).swbool != 0);
        sw.setChecked(bool);
        imgview.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                View parentRow = (View) v.getParent();
                ListView listView = (ListView) parentRow.getParent();
                final int position = listView.getPositionForView(parentRow);
                Toast.makeText(context_,position+"",Toast.LENGTH_LONG).show();
            }
        });
        return ViewRow;
    }

Mais lorsque je teste mon projet et que je clique sur imageview, cela me donne forceclose et cette erreur dans logcat

12-27 20:58:50.343 5658-5658/com.amir_p.yadambendaz E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.amir_p.yadambendaz, PID: 5658
java.lang.ClassCastException: android.widget.LinearLayout cannot be cast to android.widget.ListView at com.amir_p.yadambendaz.listadapter$1.onClick(listadapter.java:49)

Que puis-je faire?

4
Amir_P 27 déc. 2015 à 20:30

3 réponses

Meilleure réponse

Essayez de changer

public View getView(int position, View convertView, ViewGroup parent) {
    ...
    @Override
    public void onClick(View v) {
        View parentRow = (View) v.getParent();
        ListView listView = (ListView) parentRow.getParent();
        ...
}

À

public View getView(int position, View convertView, final ViewGroup parent) {
    ...
    @Override
    public void onClick(View v) {
        ListView listView = (ListView) parent;
        ...
}
3
Mohammed Aouf Zouag 27 déc. 2015 à 17:34

Le moyen le plus simple consiste à utiliser une balise.
Vous pouvez utiliser le code suivant.

imgview.setTag(new Integer(position);
imgview.setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View v) {            
      final int position = (Integer)v.getTag();               
      Toast.makeText(context_,position+"",Toast.LENGTH_LONG).show();
   }
});

Si vous souhaitez enregistrer un autre objet dans la balise, vous pouvez utiliser setTag(int key, Object object) pour enregistrer la position.

Pour obtenir Listview, vous pouvez utiliser le code suivant.

ListView listview = (ListView) v.getParent() //item view 
       .getParent()  //Linear Layout in listview 
       .getParent();//ListView
1
Slava Vedenin 3 févr. 2016 à 21:56

Afficher parentRow = (Afficher) v.getParent (); ListView listView = (ListView) parentRow.getParent (); Vous écrivez un écouteur pour imageview et obtenir un parent à partir d'une image renverra une ligne de listview. Ici parentRow.getParent () est une ligne dans listView qui est une mise en page et vous la transtypez en listview.

0
Shriram 27 déc. 2015 à 17:36