Android 用ListView实现排序

这个博客展示了如何在Android应用中实现商品列表的升序和降序排序功能。通过点击单价或数量按钮,利用Comparator接口对商品实体类Shangping的属性进行排序,实现了ListView的数据动态更新。博客涵盖了布局文件、商品实体类、ListView适配器以及排序逻辑的详细代码实现。
摘要由CSDN通过智能技术生成

点击“单价”按钮或“数量信息”按钮,可按据升序或降序进行排序。 在这里插入图片描述

布局没什么好说的

在这里插入代码片<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".shangpingActivity"
    android:orientation="vertical">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:text="商品列表"
        android:textColor="#000000"
        android:textStyle="bold"
        android:textSize="25sp"
        android:gravity="center"/>

    <LinearLayout
        android:layout_marginTop="5dp"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
            <TextView
                android:text="ID"
                android:textStyle="bold"
                android:textColor="#000000"
                android:gravity="center"
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="wrap_content"/>
            <TextView
                android:text="商品名称"
                android:textStyle="bold"
                android:textColor="#000000"
                android:gravity="center"
                android:layout_weight="1"
                android:layout_width="0dp"
                android:layout_height="wrap_content"/>
            <TextView
                android:text="供应商"
                android:textStyle="bold"
                android:textColor="#000000"
                android:gravity="center"
                android:layout_weight="1"
                android:layout_width="0dp"
                android:layout_height="wrap_content"/>
            <TextView
                android:id="@+id/tv_but_price"
                android:text="单价(元)"
                android:textStyle="bold"
                android:textColor="#000000"
                android:gravity="center"
                android:layout_weight="1"
                android:layout_width="0dp"
                android:layout_height="wrap_content"/>
            <TextView
                android:id="@+id/tv_but_num"
                android:text="数量(个)"
                android:textStyle="bold"
                android:textColor="#000000"
                android:gravity="center"
                android:layout_weight="1"
                android:layout_width="0dp"
                android:layout_height="wrap_content"/>

        </LinearLayout>


        <ListView
            android:id="@+id/list_viewsp"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>

    </LinearLayout>

</LinearLayout>

接下来写 商品的实体类

在这里插入代码片
public class Shangping {

    private String id;
    private String name;
    private String shop;
    private String price;
    private String num;

    public Shangping(String id, String name, String shop, String price, String num) {
        this.id = id;
        this.name = name;
        this.shop = shop;
        this.price = price;
        this.num = num;
    }

    public String getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getShop() {
        return shop;
    }

    public void setShop(String shop) {
        this.shop = shop;
    }

    public String getPrice() {
        return price;
    }

    public void setPrice(String price) {
        this.price = price;
    }

    public String getNum() {
        return num;
    }

    public void setNum(String num) {
        this.num = num;
    }
}

实体类为后面的传值做准备

接着写listview的布局文件

在这里插入代码片

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">
    <TextView
        android:id="@+id/tv_id"
        android:gravity="center"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"/>
    <TextView
        android:id="@+id/tv_name"
        android:gravity="center"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"/>
    <TextView
        android:id="@+id/tv_shop"
        android:gravity="center"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"/>
    <TextView
        android:id="@+id/tv_privc"
        android:gravity="center"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"/>
    <TextView
        android:id="@+id/tv_num"
        android:gravity="center"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"/>

</LinearLayout>

然后写listview的适配器

在这里插入代码片


public class AdapterShangPing extends ArrayAdapter {

    private int count;

    public AdapterShangPing(@NonNull Context context, int resource, List<Shangping> list) {
        super(context, resource,list);
        count=resource;
    }

    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {

            Shangping sp= (Shangping) getItem(position);
            View view= LayoutInflater.from(getContext()).inflate(count,null);
            TextView tv1,tv2,tv3,tv4,tv5;
            tv1=view.findViewById(R.id.tv_id);
            tv2=view.findViewById(R.id.tv_name);
            tv3=view.findViewById(R.id.tv_shop);
            tv4=view.findViewById(R.id.tv_privc);
            tv5=view.findViewById(R.id.tv_num);
            tv1.setText(sp.getId());
            tv2.setText(sp.getName());
            tv3.setText(sp.getShop());
            tv4.setText(sp.getPrice());
            tv5.setText(sp.getNum());

        return view;
    }
}


接着写排序,排序其实很简单,只需要创建一个实体类然后实现Comparator接口,然后重写compare方法

在这里插入代码片
public class Pricesort implements Comparator<Shangping> {
    @Override
    public int compare(Shangping o1, Shangping o2) {
        return o1.getPrice().compareTo(o2.getPrice());
    }
}
在这里插入代码片
public class Numsort implements Comparator<Shangping> {
    @Override
    public int compare(Shangping o1, Shangping o2) {
        return o1.getNum().compareTo(o2.getNum());
    }
}

最后附上Activity代码

在这里插入代码片
public class shangpingActivity extends AppCompatActivity {
    private ListView listView;
    private List<Shangping> list_sp=new ArrayList<>();//存数据
    TextView tvbut_price,tvbut_num;
    AdapterShangPing adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_shangping);
        into();//初始化数据
        listView=findViewById(R.id.list_viewsp);
        tvbut_num=findViewById(R.id.tv_but_price);
        tvbut_price=findViewById(R.id.tv_but_num);
         adapter=new AdapterShangPing(shangpingActivity.this,R.layout.list_shangping,list_sp);//初始化适配器
        listView.setAdapter(adapter);
            setClick();//设置textview的点击事件,然后排序
    }
    private  void into(){
        list_sp.add(new Shangping("1","发动机10A","发动机供应商","3,100","6"));
        list_sp.add(new Shangping("2","发动机10A","发动机供应商","4,100","1"));
        list_sp.add(new Shangping("3","发动机10A","发动机供应商","5,100","3"));
        list_sp.add(new Shangping("4","发动机10A","发动机供应商","4,300","4"));
    }
    private void setClick(){
			
        tvbut_price.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Collections.sort(list_sp,new Numsort());
                adapter.notifyDataSetChanged();
            }
        });
        tvbut_num.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Collections.sort(list_sp,new Pricesort());
                adapter.notifyDataSetChanged();
            }
        });

    }

}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值