如何在android中按数值列对listview项目进行排序
Posted
技术标签:
【中文标题】如何在android中按数值列对listview项目进行排序【英文标题】:How to sort listview items by numeric values column in android 【发布时间】:2020-08-28 13:55:25 【问题描述】:我有一个列表视图 lv,其中包含以下项目:
Hyda, 25.00
Bran, 11.75
Geda, 2.55
我想按第二列对项目进行排序,以便列表视图显示:
Geda, 2.55
Bran, 11.75
Hyda, 25.00
我在下面使用的代码仅按第一列排序;即它返回:
Bran, 11.75
Geda, 2.55
Hyda, 25.00
ArrayList<String> list = new ArrayList<>();
ArrayAdapter<String> adapter;
lv = rootView.findViewById(R.id.lvData);
adapter = new ArrayAdapter<String>(getContext(),android.R.layout.simple_list_item_1, list);
list.add("Hyda"+", "+"25.00");
list.add("Bran"+", "+"11.75");
list.add("Geda"+", "+"2.55");
lv.setAdapter(adapter);
btnSort = rootView.findViewById(R.id.sortButton);
btnSort.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
Collections.sort(list,new myComparatorNumbers());
for (String i:list)
lv.setAdapter(adapter);
);
private class myComparatorNumbers implements Comparator<String>
@Override
public int compare(String o1, String o2)
return o1.compareTo(o2);
任何人都可以帮助如何按第二列(即按数值)对其进行排序吗?我发现的大多数解决方案都集中在一个列数据数组上
【问题讨论】:
【参考方案1】:似乎我的旧答案无法帮助您,我现在正在添加完整的实现。它肯定会帮助你
class User
String name;
double score;
User(String name, double score)
this.name = name;
this.score = score;
主活动
public class MainActivity extends AppCompatActivity
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button sortButton = findViewById(R.id.sortButton);
ListView lv = findViewById(R.id.lvData);
List<User> data = new ArrayList<>();
data.add(new User("Bran", 11.75));
data.add(new User("Geda", 2.55));
data.add(new User("Hyda", 25.00));
final UsersAdapter adapter = new UsersAdapter(this, data);
lv.setAdapter(adapter);
sortButton.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
adapter.sortLvData();
);
自定义适配器类
class UsersAdapter extends ArrayAdapter<User>
UsersAdapter(@NonNull Context context, List<User> users)
super(context, 0, users);
void sortLvData()
sort(new Comparator<User>()
@Override
public int compare(User u1, User u2)
return Double.compare(u1.score, u2.score);
);
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent)
User user = getItem(position);
if (convertView == null)
//you can even use your custom XML layout to better display the UI.
convertView = LayoutInflater.from(getContext()).inflate(android.R.layout.simple_list_item_1, parent, false);
String text = user.name + ", " + user.score;
((TextView) convertView).setText(text);
return convertView;
【讨论】:
谢谢卡兰。你能检查一下大括号吗?它确实有一些问题 哦,加上缺少的括号,我什至改进了我的答案。谢谢! 它仍然无法正常工作。对于使用类 Person,ArrayAdapter以上是关于如何在android中按数值列对listview项目进行排序的主要内容,如果未能解决你的问题,请参考以下文章