listview筛选,点击标签自动显示list数据

img

img

如图,添加数据时有一个标签,怎么实现点击左边标签,右边自动显示对应的数据。

1:左边数据和右边数据之间要维护一种关联关系,例如type、parentId等
2:使用HashMap筛选好数据,key用 关联关系type、parentId等,筛选存储好
3:点击左边标签,根据标签去 HashMap提取数据,清掉右边适配器数据源,重新添加,刷新即可

我的理解是你不知道在点击加号之后不知道如何将添加的信息以及结果通知给之前的列表,如果是这个问题的话可以参考一下方案(因为不知道你是用的什么方式传递数据,这里是采用java原生的方案):

  1. 新建一个类StudentManager,用于管理所有的学生,大改代码如下:
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public class StudentManager {

    private static StudentManager studentManager;
    
    public static StudentManager getInstance() {
        synchronized (StudentManager.class) {
            if (studentManager == null) {
                synchronized (StudentManager.class) {
                    studentManager = new StudentManager();
                }
            }
        }
        return studentManager;
    }
    
    private List<Student> studentList;
    private List<IListener> mListeners;

    private StudentManager() {
        initData();
    }

    private void initData() {
        // 如果你是涉及到不同的线程,需要使用 Concurrent 家族,不然可能崩溃
        studentList = new ArrayList<Student>();
        mListeners = new LinkedList<>();
        // 在这里初始化你的数据,为 studentList 赋值
    }
    
    public void registerListener(IListener listener) {
        // 注册监听
        mListeners.add(listener);
    }

    public void unRegisterListener(IListener listener) {
        // activity 销毁时记得反注册
        mListeners.remove(listener);
    }
    
    public void addStudent(Student student) {
        studentList.add(student);
        for (IListener listener : mListeners) {
            listener.onStudentListUpdate(studentList);
        }
    }
    
    public static void release() {
        // 释放数据
        if (studentManager != null) {
            studentManager.studentList.clear();
            studentManager.studentList = null;
            studentManager.mListeners.clear();
            studentManager.mListeners = null;
            studentManager = null;
        }
    }
    
    public interface IListener {
        // 数据变更通知
        void onStudentListUpdate(List<Student> list);
    }
}
  1. 在你的列表位置 注册监听

    StudentManager.getInstance().registerListener(new StudentManager.IListener() {
     @Override
     public void onStudentListUpdate(List<Student> list) {
         // 数据更新之后你要做的操作,比如你要刷新一下列表
     }
    });
    
  2. 在你点击加号时,通知manager学生添加的事件,如:

    Student student; // 这是你添加的学生
    StudentManager.getInstance().addStudent(student);
    
  3. 你也可以在 StudentManager 中添加各种各样你需要的方法,来使不同页面都可以方便调用,同时保证数据一致性。

如果你的问题不是这个,可以再向我提问,我会在解答