首页 > 解决方案 > 如何从另一个类更改 recyclerView 适配器内的 ImageView?

问题描述

如何从 RectangularIViewObjSeter 更改 charchama_adapter 类中的 ImageView?

RectangularIViewObjSeter 类中的 setView 方法是我编写代码块以更改回收器视图适配器内的图像视图的地方。值和资源都不是 null 或 0。我认为问题在于在图像视图中设置上下文。但我不确定。

public class RectangularIViewObjSeter implements IViewObjSeter {
Context context;
ImageView imageView;

public RectangularIViewObjSeter(Context context) {
    this.context = context;
}

@Override
public void setView(String Value, int Resource) {

    imageView = ((Activity)context).findViewById(Resource);
    Uri uri = Uri.parse(Value);
    Picasso.get().load(uri).into(imageView);
}
}

我的回收站视图是这样的(PS 它在一个片段内)

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


View v;
ArrayList<ContentPOJO> list;
int sizeOfNesContentList;
int Height, Width;
Context context;


public charchama_adapter(ArrayList<ContentPOJO> list, Context context) {
    this.list = new ArrayList<>();
    this.list = list;



    if (list.isEmpty()) {
        sizeOfNesContentList = 0;
    } else {
        sizeOfNesContentList = list.size();
    }


}

public class MyViewHolder extends RecyclerView.ViewHolder {
    public MyViewHolder(View itemView) {
        super(itemView);
    }
}

@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int 
viewType) {
    v = 
LayoutInflater.from(parent.getContext()).inflate(R.layout.charchama_adapter, 
null);
    Height = parent.getHeight();
    Width = parent.getWidth();
    context = parent.getContext();
    MyViewHolder viewHolder = new MyViewHolder(v);
    return viewHolder;
}

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

    SetView setView = new SetView(context);
    ViewResource viewResource = new 
ViewResourceAdapter().setHeaderResource(R.id.contentHeader_adapterCharchama)
            .setBodyResource(R.id.contentBody_adapterCharchama)
            .setImageResource(R.id.backgroundImage_charchamaAdapter)
            .setAuthorAndDateResource(R.id.autherAndDate_charchamaFragment)

.setNewsCategory(R.id.newsCategory_charchamaAdapter).getViewResource();

    ContentPOJO contentPOJO = list.get(position);
    setView.setResources(viewResource, contentPOJO, false);


}


@Override
public int getItemCount() {
    return sizeOfNesContentList;
}
}

这是另一个设置我的视图的类

public class SetView implements ISetView {
Context context;


public SetView(Context context) {
    this.context = context;
}

@Override
    public void setResources(ViewResource viewResource, ContentPOJO 
contentPOJO, Boolean CircularImage) {




    if(viewResource.getImageResource() !=0){
        IViewObjSeter iViewObjSeter;
        if (CircularImage == true) {

        iViewObjSeter = new CircularIViewObjSeter(context);

    } else {
        iViewObjSeter = new RectangularIViewObjSeter(context);
    }

      iViewObjSeter.setView(contentPOJO.getImageURL(), 
viewResource.getImageResource());
  }

    TextViewSetter textViewSetter = new TextViewSetter(context);

    if (viewResource.getAuthorAndDateResource() != 0) {
        if (contentPOJO.getDate().equals(null)) {
            textViewSetter.setView(contentPOJO.getAuthor(), 
viewResource.getAuthorAndDateResource());
        } else {
            textViewSetter.setView(contentPOJO.getAuthor() + " | " + 
contentPOJO.getDate(), viewResource.getAuthorAndDateResource());
        }
    }

    if(viewResource.getBodyResource()!=0){
        textViewSetter.setView(contentPOJO.getStory(), 
viewResource.getBodyResource());
    }
    if(viewResource.getHeaderResource() !=0){
        textViewSetter.setView(contentPOJO.getHeading(), 
viewResource.getHeaderResource());
    }
    if(viewResource.getNewsCategory()!=0){
        textViewSetter.setView(contentPOJO.getNewsCategory(), 
viewResource.getNewsCategory());
    }

}

}

标签: android

解决方案


charchama_adapter类中,您定义一个名为context如下的字段:

Context context;

但是您没有在类的构造函数中对其进行初始化charchama_adapter,这就是问题所在。

public charchama_adapter(ArrayList<ContentPOJO> list, Context context) {
    this.list = new ArrayList<>();
    this.list = list;
    this.context = context; //add this line


    if (list.isEmpty()) {
        sizeOfNesContentList = 0;
    } else {
        sizeOfNesContentList = list.size();
    }


}

推荐阅读