【问题标题】:Updating fragment textView text from adapter class after removing a list item删除列表项后从适配器类更新片段 textView 文本
【发布时间】:2020-08-06 02:44:30
【问题描述】:

我有一个带有 recyclerView 的片段。

片段中有 textview 显示来自 recyclerView 的项目数。

在每个 recyclerView 项目上都有一个按钮,用于从 recyclerView 中删除项目:

在适配器中:

subjects.remove(holder.getAdapterPosition());
notifyItemRemoved(holder.getAdapterPosition());
notifyItemRangeChanged(position,subjects.size());

其中subjects是填充recycleview的列表。

这三行确实会从 recyclerView 中删除项目并更新列表大小。

我需要同时更新片段中的文本视图,该片段显示recyclerview中的项目数,将新值从subjects.size()传递给片段作为文本视图的文本。

编辑

public class RecyclerViewFollowingMiosBusquedaCardViewAdapter extends RecyclerView.Adapter<RecyclerViewFollowingMiosBusquedaCardViewAdapter.ViewHolder> {

    Context context;

    List<UsuariosBuscarFollowing> subjects;
public RecyclerViewFollowingMiosBusquedaCardViewAdapter(List<UsuariosBuscarFollowing> getDataAdapter, Context context){

    super();

    this.subjects = getDataAdapter;

    this.context = context;



}


@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview_amigos_following_busqueda, parent, false);

    ViewHolder viewHolder = new ViewHolder(view);

    return viewHolder;
}

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

片段。适配器初始化:

txtNumFollowers.setText(numFollowers+" "+getResources().getString(R.string.followers));


        recyclerViewadapterFollowers = new RecyclerViewFollowersMiosBusquedaCardViewAdapter(subjectsListFollowers, getActivity());
        recyclerViewFollowers.setAdapter(recyclerViewadapterFollowers);

【问题讨论】:

  • 提供适配器和片段的代码。
  • 向我展示您的适配器构造函数以及您如何初始化适配器。
  • @HasanBouTaam,我将更新我的问题并包含我的适配器代码
  • 以及创建该适配器的方法。
  • @HasanBouTaam,完成

标签: android android-recyclerview


【解决方案1】:

尝试将您的主题列表用作实时数据

LiveData<List<Subject>> subjects = new MutableLiveData<>();

然后观察您的列表并聆听变化。当你根据你的 textView 获得新的列表更新 UI 时。

   subjects.observe(this, subjects -> {
       // update your textView here

        });

【讨论】:

  • 我需要更新一个 textView 文本,不是从适配器本身,而是从带有 recyclerview 的片段
  • 好的。如果你听你的 LiveData 列表,当你调用 subject.remove 时,subjects.observe 会被触发,你可以在任何你想要的地方更新
  • 我可以按照您的建议使用 LiveData 更新我的列表定义,但是如何更新片段 textVIew 中的文本?
  • 你的列表和这个方法应该在你的片段中。您必须使用构造函数或 set 方法在适配器中传递它。根据这个,你的观察方法应该在你的片段中,在你的 textView 中具有相同的位置
  • 我无法遵循您的建议
【解决方案2】:

首先在项目的新文件中创建一个接口

public interface onItemRemovedFromListListener{

void onItemRemoved(String text);
}

在您的片段中

class MyFragment extends Fragment implements onItemRemovedFromListListener{



//pass the listener to the adapter

........
recyclerViewadapterFollowers = new RecyclerViewFollowersMiosBusquedaCardViewAdapter(subjectsListFollowers, getActivity(),this);
recyclerViewFollowers.setAdapter(recyclerViewadapterFollowers);

}

@override
public void onItemRemoved(String text){

//update your text view
txtNumFollowers.setText(text);

}


}

在您的适配器中

//include a new field for listener
........
private onItemRemovedFromListListener listener;
.......

//constructor

public RecyclerViewFollowingMiosBusquedaCardViewAdapter(List<UsuariosBuscarFollowing> getDataAdapter, Context context , onItemRemovedFromListListener listener){

    super();

    this.subjects = getDataAdapter;

    this.context = context;

    this.listener = listener;



}

//now when you remove item from adapter notify the listener the fragment method will fire

subjects.remove(holder.getAdapterPosition());
notifyItemRemoved(holder.getAdapterPosition());
notifyItemRangeChanged(position,subjects.size());

//send text to update
listener.onItemRemoved("the text that you want to update goes here");

【讨论】:

  • 感谢您的回答。我已经实现了你所有的代码,并且像一个魅力一样工作。!!!!!!接口集成的 NIce 教程。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多