Android Spinner排序 ListView显示数据

主宰稳场 提交于 2019-12-23 00:52:11

现在有这么一组Bean对象需要使用ListView展示

class Bean{
    int id;
    int a;
    int b;

    public Bean(int id, int a, int b) {
        this.a = a;
        this.b = b;
        this.id = id;
    }

    public int getA() {
        return a;
    }

    public void setA(int a) {
        this.a = a;
    }

    public int getB() {
        return b;
    }

    public void setB(int b) {
        this.b = b;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }
}

首先做出页面

一个spinner 用来选择以什么排序  一排字段头   还有listView显示数据
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <Spinner
        android:id="@+id/order_Spinner"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <TextView
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="id"/>
        <TextView
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="条件B"/>
        <TextView
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="条件C"/>
    </LinearLayout>
    <ListView
        android:id="@+id/lv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
</LinearLayout>

JAVA代码

public class Order extends Fragment {

    private static ArrayList<Bean> beans;
    static {
        int bMax = 10;
        int cMax = 40;
        Random random = new Random();
        beans = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            beans.add(new Bean(i, random.nextInt(bMax), random.nextInt(cMax)));
        }
    }

    private Spinner order_spinner;
    private ListView lv;
    private ArrayList<HashMap<String, String>> data;
    private SimpleAdapter simpleAdapter;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = View.inflate(getContext(), R.layout.fragment_order, null);
        initView(view);
        return view;
    }


    private void initView(View view) {
        order_spinner = view.findViewById(R.id.order_Spinner);
        lv = view.findViewById(R.id.lv);
        {
            data = new ArrayList<>();
            simpleAdapter = new SimpleAdapter(getContext(), data, R.layout.order_lv_item,
                    new String[]{"id", "a", "b"}, new int[]{R.id.id, R.id.a, R.id.b});
            lv.setAdapter(simpleAdapter);
        }
        {
            ArrayList<String> strings = new ArrayList<>();
            strings.add("id升序");
            strings.add("id降序");
            strings.add("条件a升序");
            strings.add("条件a降序");
            strings.add("条件b升序");
            strings.add("条件b降序");
            ArrayAdapter arrayAdapter = new ArrayAdapter<String>(getContext(), android.R.layout.activity_list_item, android.R.id.text1, strings);
            order_spinner.setAdapter(arrayAdapter);
            order_spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                @Override
                public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                    //因为Spinner选项都是写死的  所以我可以根据选项位置来知道我需要以什么字段排序
                    order(i);
                }
                @Override
                public void onNothingSelected(AdapterView<?> adapterView) {}
            });
        }
        order(0);
    }

    private void order(final int order){
        data.clear();
        for (int i = 0; i < beans.size(); i++) {
            Bean bean = beans.get(i);
            HashMap<String, String> hm = new HashMap<>();
            hm.put("id", String.valueOf(bean.getId()));
            hm.put("a", String.valueOf(bean.getA()));
            hm.put("b", String.valueOf(bean.getB()));
            data.add(hm);
        }
        //根据spinner选择项的位置来排序  因为spinner的选项都是固定写死的
        Collections.sort(data, new Comparator<HashMap<String, String>>() {
            @Override
            public int compare(HashMap<String, String> t0, HashMap<String, String> t1) {
                //需要排序那一列数据  只需要获取这个字段的数据
                int o1 = Integer.parseInt(String.valueOf(t0.get("id"))) - Integer.parseInt(String.valueOf(t1.get("id")));
                int o2 = Integer.parseInt(String.valueOf(t0.get("a"))) - Integer.parseInt(String.valueOf(t1.get("a")));
                int o3 = Integer.parseInt(String.valueOf(t0.get("b"))) - Integer.parseInt(String.valueOf(t1.get("b")));
                //id字段肯定不会有重复的数据 所以当出现主序字段有相等值时  再以id为副序字段排序
                switch (order){
                    default:case 0: return o1;
                    case 1:return -o1;
                    case 2:return o2==0?o1:o2;
                    case 3:return o2==0?o1:-o2;
                    case 4:return o3==0?o1:o3;
                    case 5:return o3==0?o1:-o3;
                }
            }
        });
        simpleAdapter.notifyDataSetChanged();
    }

    static class Bean{
        int id;
        int a;
        int b;

        public Bean(int id, int a, int b) {
            this.a = a;
            this.b = b;
            this.id = id;
        }

        public int getA() {
            return a;
        }

        public void setA(int a) {
            this.a = a;
        }

        public int getB() {
            return b;
        }

        public void setB(int b) {
            this.b = b;
        }

        public int getId() {
            return id;
        }

        public void setId(int id) {
            this.id = id;
        }
    }
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!