Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 单击图像时如何刷新RecyclerView?_Android_Android Recyclerview - Fatal编程技术网

Android 单击图像时如何刷新RecyclerView?

Android 单击图像时如何刷新RecyclerView?,android,android-recyclerview,Android,Android Recyclerview,我知道过去有人问过这个问题。由于某种原因,即使我试着使用它,我似乎也无法让它工作 understoodLanguageListAdapter.notifyDataSetChanged(); 在我的活动文件中。这是我的密码 包含RecyclerView的片段文件 <android.support.v7.widget.RecyclerView android:id="@+id/color_list" android:scrol

我知道过去有人问过这个问题。由于某种原因,即使我试着使用它,我似乎也无法让它工作

understoodLanguageListAdapter.notifyDataSetChanged(); 
在我的活动文件中。这是我的密码

包含RecyclerView的片段文件

        <android.support.v7.widget.RecyclerView
            android:id="@+id/color_list"
            android:scrollbars="vertical"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/> 

项目布局:

<TextView
    android:id="@+id/colorText"
    android:layout_height="wrap_content" />

<ImageView
    android:id="@+id/colorImage"
    android:layout_height="wrap_content"
    android:clickable="true"
    android:visibility="visible"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintBottom_toBottomOf="parent"
    app:srcCompat="@drawable/icn_close_bluepurple" />


适配器代码: 公共类ColorsListAdapter扩展了RecyclerView.Adapter{

Context context;
List<String> list;

public ColorsListAdapter(Context context, List<String> list) {
    this.context = context;
    this.list = list;
}

@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.colors_item,parent, false);
    return new MyViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
    holder.textView.setText(list.get(position));
    holder.imageView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            ColorsManager colorsManager = new ColorsManager();
            colorsManager.deleteFromColorsList(holder.textView.getText().toString());
        }
    });
}

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

class MyViewHolder extends RecyclerView.ViewHolder {

    TextView textView;
    ImageView imageView;

    public MyViewHolder(View itemView) {
        super(itemView);
        textView = (TextView) itemView.findViewById(R.id.colorText);
        imageView = (ImageView) itemView.findViewById(R.id.colorImage);
    }
}
语境;
名单;
公共ColorsListAdapter(上下文、列表){
this.context=上下文;
this.list=列表;
}
@非空
@凌驾
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup父级,int-viewType){
View=LayoutFlater.from(parent.getContext()).flate(R.layout.colors\u项,parent,false);
返回新的MyViewHolder(视图);
}
@凌驾
public void onBindViewHolder(@NonNull MyViewHolder,int位置){
holder.textView.setText(list.get(position));
holder.imageView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
ColorsManager ColorsManager=新的ColorsManager();
colorsManager.deleteFromColorsList(holder.textView.getText().toString());
}
});
}
@凌驾
public int getItemCount(){
返回list.size();
}
类MyViewHolder扩展了RecyclerView.ViewHolder{
文本视图文本视图;
图像视图图像视图;
公共MyViewHolder(查看项目视图){
超级(项目视图);
textView=(textView)itemView.findViewById(R.id.colorText);
imageView=(imageView)itemView.findViewById(R.id.colorImage);
}
}
}

活动代码如下:

RecyclerView recyclerView;
List<String> list;
UnderstoodLanguageListAdapter understoodLanguageListAdapter;
---
---
@Override
protected void initialize(Bundle savedInstanceState) {
    recyclerView = (RecyclerView) findViewById(R.id.color_list);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    ColorsManager colorsManager = new ColorsManager();
    list = colorsManager.getUnderstoodLanguageList();
    colorsListAdapter = new ColorsListAdapter(this, list);
    recyclerView.setAdapter(colorsListAdapter);
}
RecyclerView-RecyclerView;
名单;
UnderToodLanguageListAdapter UnderToodLanguageListAdapter;
---
---
@凌驾
受保护的void初始化(Bundle savedInstanceState){
recyclerView=(recyclerView)findViewById(R.id.color\u列表);
recyclerView.setLayoutManager(新的LinearLayoutManager(本));
ColorsManager ColorsManager=新的ColorsManager();
list=colorsManager.getUnderShoodLanguageList();
colorsListAdapter=新的colorsListAdapter(此,列表);
recyclerView.setAdapter(colorsListAdapter);
}
非常感谢您提供有关修复的任何建议/提示


谢谢大家!

您应该尝试
notifyItemRemoved(position)

首先,您必须让适配器知道在某些位置进行了一些更改,以实现您需要使用一些回调(侦听器),必须从视图->适配器->视图持有者或类似的内容中传递。每当用户单击ImageView时,您都会创建新的
ColorManager实例。
这个新实例显然不同于您在
initialize()
中使用的实例


因此,新实例中的项目将被更新,而不是传递给recycler adapter的列表

您应该在adapter类中进行更改,如replace bellow code

@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
holder.textView.setText(list.get(position));
holder.imageView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        ColorsManager colorsManager = new ColorsManager();
          colorsManager.deleteFromColorsList(holder.textView.getText().toString());
    }
});
}

class MyViewHolder extends RecyclerView.ViewHolder {

TextView textView;
ImageView imageView;

public MyViewHolder(View itemView) {
    super(itemView);
    textView = (TextView) itemView.findViewById(R.id.colorText);
    imageView = (ImageView) itemView.findViewById(R.id.colorImage);
}
}
使用新代码

@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
    holder.textView.setText(list.get(position));
}

class MyViewHolder extends RecyclerView.ViewHolder {

TextView textView;
ImageView imageView;

public MyViewHolder(View itemView) {
    super(itemView);
    textView = (TextView) itemView.findViewById(R.id.colorText);
    imageView = (ImageView) itemView.findViewById(R.id.colorImage);

    imageView.setOnClickListener(new View.OnClickListener() {
    @Override
        public void onClick(View view) {
            int pos = getAdapterPosition(); 
            ColorsManager colorsManager = new ColorsManager();
            colorsManager.deleteFromColorsList(list.get(pos));
            notifyItemRemoved(pos);             
        }
    });
}
}

令人惊叹的!!非常感谢。