2014-05-26 19 views
5

Ho creato correttamente una griglia (con immagini e testi). Ora voglio scrivere un metodo OnItemClickListener. Posso ottenere la posizione sul metodo OnItemClickListener, ma voglio essere in grado di fare clic su "Amico" e vedere "Elemento cliccato: Amico"gridview Android OnItemClickListener

Come posso ottenere la stringa di selezione invece di la posizione? Ecco il mio codice sorgente

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(); 

     } 
    }); 
} 

}

risposta

3

Modificare questa

Toast.makeText(getApplicationContext(), 
        "Item Clicked: " + position, Toast.LENGTH_SHORT).show(); 

a

Toast.makeText(getApplicationContext(), 
         "Item Clicked: " + ((TextView) v.findViewById(R.id.item_text)).getText(), Toast.LENGTH_SHORT).show(); 
+0

grazie, ma è incorsivo answer.i ha cambiato questo codice, ma non posso mostrare ad esempio a casa se clicco a casa :( – user3619713

+0

ho anche cancellato statico in oggetto oggetto ma quando faccio clic sull'elemento in GridView posso mostrare il nome del pacchetto e come questo testo @ 556622123 – user3619713

+0

Dopo aver modificato quale risultato hai ottenuto? –

1

So che questa risposta arriverà in ritardo, ma mi sono imbattuto nello stesso problema e l'ho risolto utilizzando i tag sugli elementi selezionabili utilizzando setTag() e getTag(). Voglio solo postare questo metodo nel caso in cui aiuterà qualcun altro in futuro. Per utilizzare questo metodo e la vista "holding pattern" (come si sta usando in precedenza), è sufficiente impostare il tag su un altro oggetto all'interno dell'oggetto che "trattiene" i propri dati.

Ad esempio:

Hai già un RecordHolder oggetto pubblico con un pubblico TextView in modo da poter impostare il tag su questa TextView in questo modo:

holder.txtTitle.setTag("whatever you want")

Poi all'interno del vostro metodo di OnItemClickListener.onItemClick è possibile ottenere il tag in questo modo:

String tagValue = ((CustomGridViewAdapter.RecordHolder) view.getTag()).txtTitle.getTag().toString();

tagValue sarà whatever you want (quindi è possibile assegnare i nomi delle viste se lo si desidera). Questo metodo funziona bene se vuoi memorizzare altri dati (come ID o riferimenti) e non solo prendere il testo di TextView o qualcosa del genere. Se vuoi solo lo stesso testo che è in TextView allora la risposta di @ Giru è più adatta.

Problemi correlati