2016-12-11 3 views
-1

Ich verwende einen GridView-Adapter zum Anzeigen von Bildern (in R.drawable) und Textbeschreibungen unter den Bildern (beide Dinge sind in der strings.xml-Datei in einer Array-Liste codiert). Ich möchte das Bild und den Text in einer neuen Aktivität anzeigen, wenn auf das entsprechende Bild geklickt wird.Grid View Adapter Probleme

durch SO Sehen, fand ich, dass es besser ist, int anstelle von Bitmap aufgrund der Bildgröße für Bilder zu verwenden, aber ich habe Probleme mit dem Adapter ...

Die Linie mit: „holder.image .setImageResource (imgs.getResourceId (0, -1)); wie unten gezeigt, gibt mir einen Fehler in logcat.

Irgendwelche Ratschläge?

GridViewAdapter Code:

public GridViewAdapter(Context context, int layoutResourceId, ArrayList<ImageItem> 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; 
    ViewHolder holder; 

    if (row == null) { 
     LayoutInflater inflater = ((Activity) context).getLayoutInflater(); 
     row = inflater.inflate(layoutResourceId, parent, false); 
     holder = new ViewHolder(); 
     holder.imageTitle = (TextView) row.findViewById(R.id.text); 
     holder.image = (ImageView) row.findViewById(R.id.image); 

     row.setTag(holder); 
    } else { 
     holder = (ViewHolder) row.getTag(); 
    } 

    ImageItem item = data.get(position); 
    holder.imageTitle.setText(item.getTitle()); 
    // problem code >>> holder.image.setImageResource(imgs.getResourceId(0, -1)); 
    return row; 
} 

static class ViewHolder { 
    TextView imageTitle; 
    ImageView image; 
} 
+0

welche Fehler haben Sie bekommen? – xFighter

+0

Logcat sagt "FATALE AUSNAHME: main java.lang.NullPointerException", bevor auf die Codezeile (GridViewAdapter.getView), die ich sagte, Probleme gibt. App stürzt beim Start ab. – HReyes

Antwort

0

Ihre getView Methode sollte wie folgt aussehen.

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View row = convertView; 
    ViewHolder holder; 

    if (row == null) { 
     LayoutInflater inflater = ((Activity) context).getLayoutInflater(); 
     row = inflater.inflate(layoutResourceId, parent, false); 
     holder = new ViewHolder(row); 
     row.setTag(holder); 
    } else { 
     holder = (ViewHolder) row.getTag(); 
    } 

    ImageItem item = data.get(position); 
    holder.imageTitle.setText(item.getTitle()); 
    holder.image.setImageResource(imgs.getResourceId(0, -1)); 
    return row; 
} 

Ihre Ansicht Halter Klasse sollte wie folgt aussehen

static class ViewHolder { 
    public TextView imageTitle; 
    public ImageView image; 

    public ViewHolder(View view) { 
     image = (ImageView) view.findViewById(R.id.image); 
     imageTitle = (TextView) view.findViewById(R.id.text); 
    } 
} 
+0

Kommentare sind nicht für längere Diskussionen; Diese Konversation wurde zum Chat verschoben (http://chat.stackoverflow.com/rooms/130338/discussion-on-answer-by-xfighter-grid-view-adapter-problems). –