2014-04-16 25 views
6

Những gì tôi đang cố gắng làm là thích ứng bộ chuyển đổi ListView tùy chỉnh của tôi sử dụng hình ảnh lấy từ trang web của thư viện Picasso. Tôi tin rằng tôi đã thay đổi adapter để chấp nhận một hình ảnh từ Picasso, nhưng tôi không chắc chắn làm thế nào để thay đổi thực hiện của tôi để chấp nhận nó bằng cách sử dụng một ListView. Tôi tin rằng tôi phải truy cập holder.imageIcon, nhưng tôi không chắc chắn làm thế nào để có được nó và chạy. Mã của tôi là như sau.Sử dụng Picasso thư viện với 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; 
    } 
} 

Thực hiện

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

đọc doc? có một phần trên bộ điều hợp http://square.github.io/picasso/ bạn thường sẽ chuyển url. – njzk2

+0

Ahh, tôi hoàn toàn bỏ qua phần đó. Lỗi của tôi. Cảm ơn bạn. – Nate

Trả lời

16

Có 2 điều bạn cần thay đổi: 1) History.icon phải là url String của biểu tượng, không phải là đối tượng Picasso. Bạn cũng có thể sử dụng một File, Uri, hoặc int, nhưng một String url có lẽ là những gì bạn muốn.

2) Sửa đổi phương pháp Adapter'sgetView() của bạn để tải biểu tượng sử dụng Picasso (xem dòng cuối cùng trước khi trả về getView()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

câu trả lời này thực sự hữu ích – riza

+0

Rất hữu ích thực sự, tôi phải thừa nhận –

Các vấn đề liên quan