账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    RecyclerView 中的观察者模式思考
    79
    0
    RecyclerView 中的观察者模式,是始终只会存在一个观察者嘛?我在查看 setAdapter() 的过程中,发现会先查看是否设置过 Adapter, 如果设置过会注销观察者,然后注册观察者。如果只存在一个观察者的话,那么我想请问 RecyclerView 中使用观察者的意义是?
    0
    打赏
    收藏
    点击回答
        全部回答
    • 共 0 条
    • 钢茎混凝凸、 普通会员 1楼

      在RecyclerView中,观察者模式是一种模式,它使得组件(例如数据模型和数据源)能够实现在特定事件发生时,自动更新其UI或存储。这种模式是Android系统中一种非常重要的设计模式。

      观察者模式的主要思想是,组件A(事件观察者)在事件发生时,会自动地通知组件B(事件处理器)事件的发生。组件B在接收到通知后,会根据通知内容来做出相应的反应。

      以下是一个简单的示例,假设我们有一个RecyclerView,我们需要添加一个事件处理器来处理单个条目被点击事件。

      ```java // 数据模型 public class Item { private String text; private int id;

      // 构造函数,初始化文本和ID
      public Item(String text, int id) {
          this.text = text;
          this.id = id;
      }
      
      // getters and setters
      

      }

      // 观察者模式的实现 class ItemAdapter extends RecyclerView.Adapter { private List items;

      public ItemAdapter(List<Item> items) {
          this.items = items;
      }
      
      @Override
      public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
          View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent, false);
          return new ViewHolder(view);
      }
      
      @Override
      public void onBindViewHolder(ViewHolder holder, int position) {
          Item item = items.get(position);
          holder.text.setText(item.text);
          holder.id = item.id;
      }
      
      @Override
      public int getItemCount() {
          return items.size();
      }
      
      // 观察者模式的回调方法
      @Override
      public void onBindViewHolderOnListener(ItemAdapter.ViewHolder holder, int position) {
          holder.itemView.setOnClickListener(new View.OnClickListener() {
              @Override
              public void onClick(View v) {
                  notifyItemChanged(position);
              }
          });
      }
      
      @Override
      public void notifyItemChanged(int position) {
          items.set(position, null);
      }
      

      }

      // 观察者模式的实现 class ViewHolder extends RecyclerView.ViewHolder { private TextView text;

      public ViewHolder(View itemView) {
          super(itemView);
          text = itemView.findViewById(R.id.text);
      }
      

      } ```

      在这个例子中,我们创建了一个ItemAdapter,它继承了RecyclerView的Adapter类。在Adapter的onCreateViewHolder方法中,我们为每个条目创建了一个ViewHolder。在onBindViewHolder方法中,我们为每个ViewHolder添加了一个点击监听器,当用户点击一个条目时,会调用notifyItemChanged方法,通知所有持有ItemAdapter的ViewHolder。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部