-1

如果我使用ArrayList<ArrayList<String>>代替ArrayList<Object>來填充recyclerView,會有什麼問題嗎?還是我在這裏唯一的怪人?ArrayList <ArrayList <String>> vs ArrayList <Object>

我在每個列表項中都有圖像鏈接。有些還沒有任何圖像鏈接。

我在顯示列表時首次保存圖像,然後在圖像名稱匹配時從sdcard中獲取圖像。我也有獨特的圖像名稱。

當我滾動我的視圖時,不包含任何圖像的項目也顯示先前加載的圖像,但它不復制文本。

我也用我的適配器

@Override 
public long getItemId(int position) { 
    return position; 
} 

@Override 
public int getItemViewType(int position) { 
    return position; 
} 

這些功能。

Adapter.java

public class ChatBoxAdapter extends RecyclerView.Adapter<ChatBoxAdapter.MyViewHolder> { 

ImageLoader imageLoader = AppController.getInstance().getImageLoader(); 

public class MyViewHolder extends RecyclerView.ViewHolder { 

    public TextView text,date; 
    public ImageView image; 

    public MyViewHolder(View view) { 
     super(view); 

     text = (TextView) view.findViewById(R.id.text); 
     date = (TextView) view.findViewById(R.id.date); 
     image = (ImageView) view.findViewById(R.id.image); 
    } 
} 

Context context; 
Bitmap bitmap; 

public ChatBoxAdapter(Context _context) { 
    context = _context; 
} 

@Override 
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View itemView = LayoutInflater.from(parent.getContext()) 
      .inflate(R.layout.item_chat_box, parent, false); 

    return new MyViewHolder(itemView); 
} 

@Override 
public void onBindViewHolder(MyViewHolder holder, int position) { 

    String comment = Base.chatdatalist.get(position).get(3); 
    String image_url = Base.chatdatalist.get(position).get(4); 
    String date = Base.chatdatalist.get(position).get(5); 

    File imageFile = null; 

    if (image_url.startsWith(Base.baseUrl)) { 

     String image_name = image_url.substring(image_url.lastIndexOf("/")+1); 
     imageFile = new File(Environment.getExternalStorageDirectory().getPath() + "/Pictures/TMS Sent Images/" + image_name); 
     bitmap = null; 
     if (imageFile.exists()) { 

      BitmapFactory.Options options = new BitmapFactory.Options(); 

      long img_size = imageFile.length()/1024; 
      if (img_size <= 200) 
       options.inSampleSize = 4; 
      else 
       options.inSampleSize = 8; 

      bitmap = BitmapFactory.decodeFile(imageFile.toString(), options); 
     } 
    } 

    holder.text.setText(Html.fromHtml(comment, null, new MyTagHandler())); 

    if (position !=0 && !chat_date.equals(Base.chatdatalist.get(position - 1).get(15))) 
     holder.date.setVisibility(View.VISIBLE); 
    if (position == 0) 
     holder.date.setVisibility(View.VISIBLE); 


    if (bitmap != null) { 
     holder.image.setImageBitmap(bitmap); 
     holder.image.setVisibility(View.VISIBLE); 
    } else 
     if (image_url.startsWith(Base.baseUrl)) { 
      holder.image.setVisibility(View.VISIBLE); 
      Picasso.with(context).load(image_url).into(holder.image); 
     } 
} 

@Override 
public int getItemCount() { 
    return Base.chatdatalist.size(); 
} 

@Override 
public long getItemId(int position) { 
    return position; 
} 

@Override 
public int getItemViewType(int position) { 
    return position; 
} 
} 

可以採取什麼問題嗎?

在此先感謝。

+0

這個問題是不明確的,你有的ArrayLists的ArrayList建議是有一個一對多的關係與您的數據,例如,一個列表項可能有幾個路徑,是這樣的情況? – BiGGZ

+0

和那些函數在大多數適配器中,發佈完整的適配器代碼 – BiGGZ

+0

是的......假設我有一個數組列表commentData,我可以這樣做'commentData.add(arrayList);' – srv242

回答

0

好吧,如果你不介意鑄造每次:ArrayList<String> foo = (ArrayList<String>) commentData.get(i)而不是ArrayList<String> x = commentsData.get(i)肯定的是,使用ArrayList<Object>

+0

我使用commentData.get(i).get(j); – srv242

+0

你是否明白在'List'中指定''的好處? – BiGGZ

+0

包含字符串對象的列表? – srv242

相關問題