2014-04-16 11 views
6

Ich versuche, meinen benutzerdefinierten ListView-Adapter anzupassen, um Bilder zu verwenden, die von der Picasso-Bibliothek aus dem Internet abgerufen wurden. Ich glaube, ich habe meinen Adapter geändert, um ein Bild von Picasso zu akzeptieren, aber ich bin unsicher, wie ich meine Implementierung ändern kann, um sie mit einem ListView zu akzeptieren. Ich glaube, ich muss auf holder.imageIcon zugreifen, aber ich bin nicht sicher, wie ich es in Gang bringen soll. Mein Code ist wie folgt.Verwenden der Picasso-Bibliothek mit ListView

History.java

public class History { 
    public String score; 
    public String gametype; 
    public Picasso icon; 

    public History() { 
     super(); 
    } 

    public History(String score, String gametype, Picasso icon) { 
     super(); 
     this.score = score; 
     this.gametype = gametype; 
     this.icon = icon; 
    } 
} 

HistoryAdapter.java

public class HistoryAdapter extends ArrayAdapter<History> { 

    Context context; 
    int layoutResId; 
    History data[] = null; 

    public HistoryAdapter(Context context, int layoutResId, History[] data) { 
     super(context, layoutResId, data); 
     this.layoutResId = layoutResId; 
     this.context = context; 
     this.data = data; 
    } 

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

     if(convertView == null) 
     { 
      LayoutInflater inflater = ((Activity)context).getLayoutInflater(); 
      convertView = inflater.inflate(layoutResId, parent, false); 

      holder = new HistoryHolder(); 
      holder.imageIcon = (ImageView)convertView.findViewById(R.id.icon); 
      holder.textTitle = (TextView)convertView.findViewById(R.id.gameType); 
      holder.textScore = (TextView)convertView.findViewById(R.id.score); 

      convertView.setTag(holder); 
     } 
     else 
     { 
      holder = (HistoryHolder)convertView.getTag(); 
     } 

     History history = data[position]; 
     holder.textScore.setText(history.score); 
     holder.textTitle.setText(history.gametype); 
     holder.imageIcon.setImageResource(history.icon); 


     return convertView; 
    } 

    static class HistoryHolder 
    { 
     ImageView imageIcon; 
     TextView textTitle; 
     TextView textScore; 
    } 
} 

Implementation

History[] historyData = new History[games.length()]; 


for(int i = 0; i < games.length(); i++) { 
        JSONObject c = games.getJSONObject(i); 
        JSONObject gameStats = games.getJSONObject(i).getJSONObject(TAG_STATS); 
        type[i] = c.getString(TAG_TYPE); 
        champId[i] = c.getString("championId"); 
        cs[i] = gameStats.getString("minionsKilled"); 
        kills[i] = gameStats.getString("championsKilled"); 
        deaths[i] = gameStats.getString("numDeaths"); 
        assists[i] = gameStats.getString("assists"); 
        win[i] = gameStats.getString("win"); 

        if(win[i].equals("true")) 
         win[i] = "Victory"; 
        else 
         win[i] = "Defeat"; 

        if(type[i].equals("RANKED_SOLO_5x5")) 
         type[i] = "Ranked (Solo)"; 

        if(type[i].equals("CAP_5x5")) 
         type[i] = "TeamBuilder"; 

        if(type[i].equals("NORMAL")) 
         type[i] = "Unranked"; 

        score[i] = kills[i] +"/" + deaths[i] + "/" + assists[i]; 

        historyData[i] = new History(score[i], champId[i], R.drawable.ic_launcher); // Placeholder image 

       } 

       if(historyData == null) { 
        historyData[0] = new History("No game found", "N/A", R.drawable.ic_launcher); // Use Picasso placeholder 
        Log.i("Data", "" + historyData); 
       } 

       adapter = new HistoryAdapter(MatchHistoryActivity.this, 
         R.layout.list_adapter, 
         historyData); 

       list.setAdapter(adapter); 

list_item.xml

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="?android:attr/listPreferredItemHeight" 
    android:background="#111111" 
    android:padding="6dip" > 

    <ImageView 
     android:id="@+id/icon" 
     android:layout_width="wrap_content" 
     android:layout_height="fill_parent" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentTop="true" 
     android:layout_marginRight="6dip" 
     android:contentDescription="TODO" 
     android:src="@drawable/ic_launcher" /> 

    <TextView 
     android:id="@+id/score" 
     android:textColor="#C49246" 
     android:layout_width="fill_parent" 
     android:layout_height="26dip" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentRight="true" 
     android:layout_marginLeft="5dp" 
     android:layout_toRightOf="@id/icon" 
     android:ellipsize="marquee" 
     android:singleLine="true" 
     android:text="0/0/0 KDA" 
     android:textSize="12sp" /> 

    <TextView 
     android:id="@+id/gameType" 
     android:textColor="#C49246" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_above="@id/score" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentTop="true" 
     android:layout_alignWithParentIfMissing="true" 
     android:layout_marginLeft="5dp" 
     android:layout_toRightOf="@id/icon" 
     android:gravity="center_vertical" 
     android:textSize="16sp" /> 

</RelativeLayout> 
+0

das Dokument lesen? Es gibt einen Abschnitt über Adapter http://square.github.io/picasso/, an dem Sie normalerweise eine URL übergeben würden. – njzk2

+0

Ahh, ich habe diesen Abschnitt komplett übersehen. Mein Fehler. Vielen Dank. – Nate

Antwort

16

Es gibt zwei Dinge, die Sie ändern müssen: 1) History.icon sollte die String URL des Symbols sein, kein Picasso Objekt. Sie können auch eine File, Uri oder int verwenden, aber eine String URL ist wahrscheinlich, was Sie wollen.

2) Ändern Sie bitte Ihre Adapter'sgetView() Methode das Symbol laden mit Picasso (siehe die letzte Zeile vor getView() kehrt die convertView):

public class HistoryAdapter extends ArrayAdapter<History> { 

    Context context; 
    int layoutResId; 
    History data[] = null; 

    public HistoryAdapter(Context context, int layoutResId, History[] data) { 
     super(context, layoutResId, data); 
     this.layoutResId = layoutResId; 
     this.context = context; 
     this.data = data; 
    } 

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

     if(convertView == null) 
     { 
      LayoutInflater inflater = ((Activity)context).getLayoutInflater(); 
      convertView = inflater.inflate(layoutResId, parent, false); 

      holder = new HistoryHolder(); 
      holder.imageIcon = (ImageView)convertView.findViewById(R.id.icon); 
      holder.textTitle = (TextView)convertView.findViewById(R.id.gameType); 
      holder.textScore = (TextView)convertView.findViewById(R.id.score); 

      convertView.setTag(holder); 
     } 
     else 
     { 
      holder = (HistoryHolder)convertView.getTag(); 
     } 

     History history = data[position]; 
     holder.textScore.setText(history.score); 
     holder.textTitle.setText(history.gametype); 
     Picasso.with(this.context).load(history.icon).into(holder.imageIcon) 


     return convertView; 
    } 

    static class HistoryHolder 
    { 
     ImageView imageIcon; 
     TextView textTitle; 
     TextView textScore; 
    } 
} 
+0

Diese Antwort ist wirklich hilfreich – riza

+0

Sehr hilfreich in der Tat, ich muss zugeben –