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);
}
});
}
}
令人惊叹的!!非常感谢。