web-dev-qa-db-fra.com

Android: Obtenir votre liste à partir du bouton dans la liste personnalisée

J'ai un ListView personnalisé avec deux boutons et quand je clique sur l'un des boutons d'une rangée quelconque, je veux obtenir l'étiquette de texte sur la vue en liste et, pour l'instant, affiche simplement un pain grillé. Jusqu'à présent, rien n'a fonctionné, je continue à obtenir le dernier élément de mon tableau.

Voici une capture d'écran pour vous donner une meilleure idée de ce que je veux dire

enter image description here

Voici ma sous-classe d'adaptateur pour mon ListView personnalisé

static final String[] Names = 
           new String[] { "John", "Mike", "Maria", "Miguel"};


class MyArrayAdapter extends ArrayAdapter<String> {
    private final Context context;      

    int which;

    public MyArrayAdapter(Context context, String[] pValues) {
        super(context, R.layout.main, pValues);
        this.context = context;
        values = pValues;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        rowView = inflater.inflate(R.layout.main, parent, false);
        TextView textView = (TextView) rowView.findViewById(R.id.label);
        ImageView imageView = (ImageView) rowView.findViewById(R.id.logo);
        Button call = (Button) rowView.findViewById(R.id.button1);
        Button chat = (Button) rowView.findViewById(R.id.button2);
        textView.setText(values[position]);


        // Change icon based on name
        s = values[position];           
        which = position;
        call.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                String name = values[which];
                Toast.makeText(CustomListView.this, name, Toast.LENGTH_SHORT).show();
            }
        });

        return rowView;
    }
}

Modifier:

String name = textView.getText().toString();
RelativeLayout ll = (RelativeLayout)v.getParent();
textView = (TextView)ll.findViewById(R.id.label);
Toast.makeText(CustomListView.this, name,
Toast.LENGTH_SHORT).show();
14
Amanni

Facile à faire:

    call.setOnClickListener(new OnClickListener() { 
        @Override 
        public void onClick(View v) { 
            RelativeLayout rl = (RelativeLayout)v.getParent();
            TextView tv = (TextView)rl.findViewById(R.id.label);
            String text = tv.getText().toString();
            Toast.makeText(CustomListView.this, text, Toast.LENGTH_SHORT).show(); 
        } 
    }); 
14
Barak

utiliser l'attribut setTag de la vue ..............

comme

Button call = (Button) rowView.findViewById(R.id.button1);
call.setTag(position);

et

call.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
               int which = -1;
               Obejct obj =  v.getTag();
              if(obj instaceof Integer){
               which  = ((Integer)obj).intValue();
                    }

              if(which >-1){
                String name = values[which];
                Toast.makeText(CustomListView.this, name, Toast.LENGTH_SHORT).show();
                }
            }
        });
5
Dheeresh Singh

Si vous avez une ListActivity et que vous n'utilisez pas votre propre adaptateur, vous pouvez toujours obtenir l'élément de la liste appartenant au bouton sélectionné, comme suit:

Dans votre fichier de disposition de la ligne de liste:

<ImageButton
        Android:id="@+id/button_call"
        Android:layout_height="48dip"
        Android:layout_width="48dip"
        Android:contentDescription="Call"
        Android:onClick="callBuddy"
        Android:src="@drawable/call_button_image"
        />

Dans votre ListActivity:

public void callBuddy(View view) {

    int position = getListView().getPositionForView((View) view.getParent());
    Buddy buddyToCall = (Buddy) getListView().getItemAtPosition(position);

    Toast.makeText(MyListActivity.this, String.format("Calling your buddy %s.", buddyToCall.name), Toast.LENGTH_SHORT).show();

}
3
Ciske Boekelo

utilisez simplement getItem () et passez la position Ex: getItem(position).getID() ici la méthode getID () est une méthode getter

0
Ramesh kumar

Définissez onClick = "click" sur xml de button/image/etc ...

et dans votre activité, faites:

public void click(View v) {
    final int position = getListView().getPositionForView(v);
    String text = getListView().getItemAtPosition(position).toString();
    Toast.makeText(getApplicationContext, text, Toast.LENGTH_SHORT).show();
}
0
Alexandre Prazeres