Android gridview OnItemClickListener
J'ai réussi à créer un personnalisé gridview(avec images et textes). Maintenant, je veux écrire un OnItemClickListener méthode.Je peux obtenir la position sur OnItemClickListener méthode, mais je veux être en mesure de cliquer sur "Ami" et de voir "l'Élément cliqué : Ami"
Comment puis-je obtenir sélectionnez la chaîne à la place de la poste?
Voici mon code source
public class Item {
Bitmap image;
String title;
public Item(Bitmap image, String title) {
super();
this.image = image;
this.title = title;
}
public Bitmap getImage() {
return image;
}
public void setImage(Bitmap image) {
this.image = image;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public class CustomGridViewAdapter extends ArrayAdapter<Item> {
Context context;
int layoutResourceId;
ArrayList<Item> data = new ArrayList<Item>();
public static Item item ;
public CustomGridViewAdapter(Context context, int layoutResourceId,
ArrayList<Item> data) {
super(context, layoutResourceId, data);
this.layoutResourceId = layoutResourceId;
this.context = context;
this.data = data;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
RecordHolder holder = null;
if (row == null) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new RecordHolder();
holder.txtTitle = (TextView) row.findViewById(R.id.item_text);
holder.imageItem = (ImageView) row.findViewById(R.id.item_image);
row.setTag(holder);
} else {
holder = (RecordHolder) row.getTag();
}
item= data.get(position);
holder.txtTitle.setText(item.getTitle());
holder.imageItem.setImageBitmap(item.getImage());
return row;
}
public static class RecordHolder {
public static TextView txtTitle;
ImageView imageItem;
}
}
public class MainActivity extends Activity {
GridView gridView;
ArrayList<Item> gridArray = new ArrayList<Item>();
CustomGridViewAdapter customGridAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//set grid view item
Bitmap homeIcon = BitmapFactory.decodeResource(this.getResources(),
R.drawable.home);
Bitmap userIcon = BitmapFactory.decodeResource(this.getResources(),
R.drawable.personal);
gridArray.add(new Item(homeIcon, "Home"));
gridArray.add(new Item(userIcon, "User"));
gridArray.add(new Item(homeIcon, "House"));
gridArray.add(new Item(userIcon, "Friend"));
gridArray.add(new Item(homeIcon, "Home"));
gridArray.add(new Item(userIcon, "Personal"));
gridArray.add(new Item(homeIcon, "Home"));
gridArray.add(new Item(userIcon, "User"));
gridArray.add(new Item(homeIcon, "Building"));
gridArray.add(new Item(userIcon, "User"));
gridArray.add(new Item(homeIcon, "Home"));
gridArray.add(new Item(userIcon, "xyz"));
gridView = (GridView) findViewById(R.id.gridView1);
customGridAdapter = new CustomGridViewAdapter(this, R.layout.row_grid,
gridArray);
gridView.setAdapter(customGridAdapter);
gridView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Toast.makeText(getApplicationContext(),
"Item Clicked: " + position, Toast.LENGTH_SHORT).show();
}
});
}
}
OriginalL'auteur user3619713 | 2014-05-26
Vous devez vous connecter pour publier un commentaire.
Modifier cette
à
j'ai aussi supprimé statique au point de l'objet, mais lorsque je clique sur l'élément dans la gridview, je peux montrer le nom de package et comme ce texte @556622123
Après l'édition de ce résultat que vous avez obtenu?
lorsque je clique sur l'élément dans la gridview j'ai comme ce résultat nom du package Élément de@5563323
Vous ne savez pas si ça pourrait fonctionner, mais je ne peux pas vous faire .getItem(position).Texte au lieu d'obtenir l'objet du texte et non pas de l'objet de la représentation de chaîne
OriginalL'auteur Giru Bhai
Je sais que cette réponse arrive un peu tard mais je viens de tomber sur le même problème et je l'ai résolu en utilisant des balises sur le cliquables éléments à l'aide de
setTag()
etgetTag()
. Je veux juste envoyer cette méthode dans le cas où il va aider quelqu'un d'autre dans l'avenir. Afin d'utiliser cette méthode et le point de vue "holding" (comme si vous utilisiez ci-dessus) que vous venez de définir la balise sur un autre élément à l'intérieur de l'objet qui est la "tenue" de vos données.Par exemple:
Vous avez déjà un public
RecordHolder
objet avec un publicTextView
de sorte que vous pouvez définir la balise sur ceTextView
comme suit:holder.txtTitle.setTag("whatever you want")
Puis à l'intérieur de votre
OnItemClickListener.onItemClick
méthode, vous pouvez obtenir la balise comme ceci:String tagValue = ((CustomGridViewAdapter.RecordHolder) view.getTag()).txtTitle.getTag().toString();
tagValue
serawhatever you want
(de sorte que vous pouvez attribuer le nom des points de vue si vous le souhaitez). Cette méthode fonctionne bien si vous voulez stocker d'autres données (comme les papiers d'identité ou de références) et de ne pas il suffit de saisir le texte deTextView
ou quelque chose comme ça. Si vous voulez juste le même texte qui est dansTextView
puis @Giru la réponse est plus appropriée.OriginalL'auteur Max Worg