Pour le ci-dessous, je l'ai ajouté le toast suivant:Mise à jour: Obtenir un toast pour un ListView avec des images sur Android App
public void Toast (View v) {
Toast.makeText(this, "Test", Toast.LENGTH_LONG).show();
}
Il fonctionne, mais évidemment tout ce qu'il ne fait qu'afficher pour tout « Test ». Je pensais que je serais capable de faire 'this.dogTitles' ou 'this.dogDescriptions' mais ça ne me le permettrait pas.
Quelqu'un peut-il expliquer pourquoi? Je l'ai placé dans la méthode onCreate.
Merci
Je ne parviens pas à travailler sur la façon de programmer un toast à chaque fois qu'un élément de la liste (ligne) est cliqué.
Je peux faire des toasts pour des programmes simples, mais j'ai du mal à trouver une solution de ce genre à cause des adaptateurs de tableau.
Mon code est ci-dessous.
Merci d'avance.
package lab.mad.cct.c3375331task2;
import android.content.Context;
import android.content.res.Resources;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
public class Task2Activity extends AppCompatActivity {
ListView list;
String [] dogTitles;
String [] dogDescriptions;
int[] images = {R.drawable.husky, R.drawable.pug, R.drawable.yorkshire_terrier, R.drawable.french_bulldog,
R.drawable.border_collie, R.drawable.great_dane, R.drawable.staffordshire_bull_terrier, R.drawable.golden_retriever,
R.drawable.german_shepherd, R.drawable.doberman};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_task2);
Resources res = getResources();
dogTitles = res.getStringArray(R.array.titles);
dogDescriptions = res.getStringArray(R.array.descriptions);
list = (ListView) findViewById(R.id.listView);
dogAdapter adapter = new dogAdapter(this, dogTitles, images, dogDescriptions);
list.setAdapter(adapter);
}
}
class dogAdapter extends ArrayAdapter<String>
{
Context context;
int[] images;
String[] titleArray;
String[] descriptionArray;
dogAdapter(Context c, String[] titles, int imgs[], String[] desc)
{
super(c, R.layout.single_row, R.id.largeText, titles);
this.context = c;
this.images = imgs;
this.titleArray = titles;
this.descriptionArray = desc;
}
class MyViewHolder
{
ImageView myImage;
TextView myTitle;
TextView myDescription;
MyViewHolder(View v)
{
myImage = (ImageView) v.findViewById(R.id.imageView);
myTitle = (TextView) v.findViewById(R.id.largeText);
myDescription = (TextView) v.findViewById(R.id.smallText);
}
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
MyViewHolder holder = null;
if (row == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.single_row, parent, false);
holder = new MyViewHolder(row);
row.setTag(holder);
Log.d("dogs", "Creating a new row");
}
else {
holder = (MyViewHolder) row.getTag();
Log.d("dogs", "Recycling stuff");
}
//ImageView myImage = (ImageView) row.findViewById(R.id.imageView);
//TextView myTitle = (TextView) row.findViewById(R.id.largeText);
//TextView myDescription = (TextView) row.findViewById(R.id.smallText);
holder.myImage.setImageResource(images[position]);
holder.myTitle.setText(titleArray[position]);
holder.myDescription.setText(descriptionArray[position]);
row.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast toast = new Toast(getContext());
toast.setDuration(Toast.LENGTH_LONG);
toast.show();
}
});
return row;
}
}
'this' se réfère à l'objet courant et change ce qu'il fait référence en fonction de l'endroit où il est appelé. J'ai mis à jour ma réponse pour montrer comment vous pouvez obtenir les valeurs des tableaux mais vous pouvez également obtenir les valeurs de l'adaptateur si nécessaire. –