如何使用自定义适配器填充2个不同大小的arraylist?

时间:2017-07-11 05:45:04

标签: android

我想用Base Adapter填充2个不同大小的arraylist:

  • 我有两张图片的Arraylist和第二个有三个名字的字符串Arraylist。
  • 我想设置1st 2图像的前2个名称,但是第3个名称重复第1个图像,依此类推。

请建议,提前致谢。

这是我的活动:

name.add("aestro"); 
name.add("blender"); 
name.add("cup_cake");
img.add(R.drawable.nougat); 
img.add(R.drawable.marshmallow); 
listView.setAdapter(new My_ada(MainActivity.this,name,img)); 

我正在尝试设置数据的适配器部分:

 view_holder.textView.setText(Name.get(i)); 
if(Img.size()<Name.size()){ 
    for(int x=0;x<Name.size();x++){ 
        view_holder.textView.setText(Name.get(i)); 
    } 
}

3 个答案:

答案 0 :(得分:0)

创建对象的Arraylist而不是两个单独的列表。

class Holder{
private int image1 // integer if it is drawable image
private int image2
.... // add all things
}

在arraylist中使用此类的对象并使用它。

Arraylist<Holder> holders = new Arraylist<>();
希望这会有所帮助。

答案 1 :(得分:0)

你为什么这样做?你只需要一个arraylist。

你可以像这样创建一个类。

class Person {

    String word, image;

    public Person(String word, String image) {
        this.word = word;
        this.image = image;
    }

    public String getWord() {
        return this.word;
    }

    public String getImage() {
        return this.image;
    }

}

之后,你可以做一些这样的代码

ArrayList<Person> listPerson = new ArrayList<Person> ();
listPerson.add(new Person("word1", "image1"));
listPerson.add(new Person("word1", "image2"));
listPerson.add(new Person("word2", "image2"));
listPerson.add(new Person("word3", "image1"));


for (int i = 0; i < listPerson.size(); i++) {
    System.out.println("WORD -> " + listPerson.get(i).getWord() + " IMAGE -> " + listPerson.get(i).getImage());
}

最后,你的输出将是....

WORD -> word1 IMAGE -> image1
WORD -> word1 IMAGE -> image2
WORD -> word2 IMAGE -> image2
WORD -> word3 IMAGE -> image1

这将允许您控制单词和图像。因此word1对于image1和image2可以是相同的。等等

如果你把它放到列表视图或网格视图中,它们会很好地结合在一起。不要过度思考这一部分。 :)

答案 2 :(得分:0)

因此,对于您提供的Json,您可以制作一个对象,或者您可以制作两个arraylist。我正在为两个arraylist发布解决方案

public class CustomAdapter extends RecyclerView.Adapter {

    private View view;
    Context context;
    ArrayList<String> names;
    ArrayList<String> images;

    public CustomAdapter (Context context, ArrayList<String> names, ArrayList<String> img) {
        this.context=context;
        names=names;
// make images equals to names
    for (int i = names.size()-1; i >=0; i--) {
    String a=imgs.get(names%imgs);
    images.add(a)
}
    }
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        view= LayoutInflater.from(parent.getContext()).inflate(R.layout.child_list,parent,false);
        return new CustomViewHolder(view);
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        final CustomViewHolder= (CustomViewHolder) holder;
        viewHolder.tvTitle.setText(names.get(position));
         Glide.with(context)
                .load(images.get(positon))
                .asBitmap()
                .diskCacheStrategy(DiskCacheStrategy.SOURCE)
                .placeholder(R.drawable.default_user)
                .into(viewHolder.ivImage);

    }

    @Override
    public int getItemCount() {
        return names.size();
    }
    private class CustomViewHolder extends RecyclerView.ViewHolder {

        TextView tvTitle;
        ImageView ivImage;
        public CustomViewHolder(View itemView) {

            super(itemView);
            tvTitle=(TextView)itemView.findViewById(R.id.tv_title);
            ivImage=(ImageView)itemView.findViewById(R.id.iv_img);

        }

    }

}

我希望这会有效,如果你对Glide有疑问,请告诉我。

相关问题