现在有这么一组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;
}
}
}
来源:CSDN
作者:LLLIIYYY
链接:https://blog.csdn.net/weixin_39587245/article/details/103656434