首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >按ListView字母顺序排序数据

按ListView字母顺序排序数据
EN

Stack Overflow用户
提问于 2014-10-06 09:53:15
回答 2查看 1.5K关注 0票数 0

我需要关于如何在ListView中按字母顺序列出我的数据的帮助。如果我将更多的数据添加到foldeData中,那么我就不需要手动移动现有的数据来按字母顺序列出它们了。

我已经从MainActivity复制了部分代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import java.util.concurrent.TimeUnit;
import android.support.v7.app.ActionBarActivity;
import com.google.android.gms.ads.*;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.os.Build;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Toast;


public class MainActivity extends ActionBarActivity implements OnClickListener {

    TextView minPastaTimer, maxPastaTimer, tv_start, tv_stop, choice; 

    int minTid, maxTid;

    private ListView listViewArticles;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);


        Folder[] folderData = new Folder[4];    



       folderData[0] = new Folder(R.drawable.icon_music_folder, "Acomo Pepe", (getString(R.string.acomo_pepe)), "Kogetid 9-10min");
       folderData[1] = new Folder(R.drawable.icon_music_folder, "Bucatini", (getString(R.string.Bucatini)),"Kogetid 9-10min");
       folderData[2] = new Folder(R.drawable.icon_music_folder, "Bumbola", (getString(R.string.Bumbola)),"Kogetid 9-10min");
       folderData[3] = new Folder(R.drawable.icon_music_folder, "Cannelloni", (getString(R.string.Cannelloni)),"Kogetid 9-10min");





       FolderAdapter adapter = new FolderAdapter(this,
               R.layout.listview_item_row, folderData);



       listViewArticles = (ListView) findViewById(R.id.listView1);
       listViewArticles.setAdapter(adapter);

    minPastaTimer = (TextView) findViewById(R.id.minPastaTimer);
    minPastaTimer.setText("00:00:00");
    maxPastaTimer = (TextView) findViewById(R.id.maxPastaTimer);
    choice = (TextView) findViewById(R.id.tv_choice);
    maxPastaTimer.setText("00:00:00");
    Button btn_italy = (Button) findViewById(R.id.btn_italy);
    Button btn_danish = (Button) findViewById(R.id.btn_danish);

    tv_start = (TextView) findViewById(R.id.tv_start);
    tv_start.setOnClickListener(this);
    tv_stop = (TextView) findViewById(R.id.tv_stop);
    tv_stop.setOnClickListener(this);


    listViewArticles.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {

           String listItemText = ((TextView) view
                    .findViewById(R.id.textViewFolderName))
                    .getText()
                    .toString();

            Toast.makeText(MainActivity.this,
                    "You clicked: " + listItemText, Toast.LENGTH_LONG)
                    .show();       

           if (listItemText.equals("Acomo Pepe")){
              minTid=10000;
              maxTid=20000;
              choice.setText("Acomo Pepe: " + (getString(R.string.acomo_pepe)));
              minPastaTimer.setText("00:08:00");
              maxPastaTimer.setText("00:09:00");
           }
           else if (listItemText.equals("Bucatini")){
            minTid=540000;
            maxTid=600000;
            choice.setText("Bucatini - Kogetid: " + (minTid/60/1000) + ("-") +(maxTid/60/1000) + ("min"));
            minPastaTimer.setText("00:09:00");
            maxPastaTimer.setText("00:10:00");
           }   
           else if (listItemText.equals("Bumbola")){
                minTid=15000;
                maxTid=30000;
                minPastaTimer.setText("00:10:00");
                maxPastaTimer.setText("00:11:00");
              }
           else if (listItemText.equals("Cannelloni")){
                minTid=15000;
            maxTid=30000;
            minPastaTimer.setText("00:11:00");
            maxPastaTimer.setText("00:12:00");
            }  


        }
    });  

FolderAdapter:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class FolderAdapter extends ArrayAdapter<Folder> {

    Context mContext;
    int layoutResourceId;
    Folder data[] = null;


     // @mContext - app context

     // @layoutResourceId - the listview_item_row.xml

     // @data - the ListItem data

    public FolderAdapter(Context mContext, int layoutResourceId, Folder[] data) {

        super(mContext, layoutResourceId, data);
        this.layoutResourceId = layoutResourceId;
        this.mContext = mContext;
        this.data = data;
    }


     // @We'll overried the getView method which is called for every ListItem we have.

     // @There are lots of different caching techniques for Android ListView to
     // achieve better performace especially if you are going to have a very long ListView.

     // @convertView - the cache of list item row layout, if it is null, inflate new

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

        if(convertView==null){
            // inflate the listview_item_row.xml parent
            LayoutInflater inflater = ((Activity) mContext).getLayoutInflater();
            convertView = inflater.inflate(layoutResourceId, parent, false);
        }

        // get the elements in the layout
        ImageView imageViewFolderIcon = (ImageView) convertView.findViewById(R.id.imageViewFolderIcon);
        TextView textViewFolderName = (TextView) convertView.findViewById(R.id.textViewFolderName);
        TextView textViewFolderDescription = (TextView) convertView.findViewById(R.id.textViewFolderDescription);
        TextView textViewFolderBoilTime = (TextView) convertView.findViewById(R.id.textViewFolderBoilTime);


        // Set the data for the list item. You can also set tags here if you want.

        Folder folder = data[position];

        imageViewFolderIcon.setImageResource(folder.folderIcon);
        textViewFolderName.setText(folder.folderName);
        textViewFolderDescription.setText(folder.folderDescription);
        textViewFolderBoilTime.setText(folder.folderBoilTime);

        return convertView;
    }

}
EN

回答 2

Stack Overflow用户

发布于 2014-10-06 10:02:20

我认为最佳实践是在调用adaptor.notifyDataChanged()方法之前对列表进行排序。好消息是你不需要手动操作,只需使用比较器进行排序即可。

您可以看到一个比较器example in this link

票数 0
EN

Stack Overflow用户

发布于 2014-10-06 10:03:02

首先使用列表,而不是使用数组作为列表的数据源。至少,这个类扩展了Collection。

您可以定义一个比较器(例如,在自定义类型上定义compareTo() ),并在显示集合之前对其进行排序:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Collections.sort(<your_list>);

编辑:有关常规集合排序,请参阅Guava

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26213788

复制
相关文章
java环境配置——cmd命令行输入java正常显示而javac则显示不是内部或者外部命令[通俗易懂]
重装系统之后第二发,配置pycharm,意料之外的错误,启动的时候竟然要求配置jdk,瞬时蒙蔽,不记得之前有这么一出啊,上图:
全栈程序员站长
2022/09/01
9460
php中时区设置(不设置则时间显示出错)
具体设置方法: 在php.ini中设置date.timezone的值为PRC,设置好以后的为:date.timezone=PRC,同时取消这一行代码的注释,即去掉前面的分号就可以了。     如果还不放心则在php中用以下语句进行测试:     $now = date('Y-m-d H:i:s', time());     echo $now."<br/>";
闵开慧
2018/03/30
3.9K0
Emlog 实现文章列表实现有图片则显示,没图片则不显示的方法
Emlog 实现文章列表实现有图片则显示,没图片则不显示的方法,直接把下面代码放入log_list.php中代码
用户8099761
2023/05/10
3490
mysql技巧:如果记录存在则更新/如果不存在则插入的三种处理方法
新增一个员工时,如果该员工已存在(以员工号f_emp_code作为判断依据),则更新,否则插入。而且工资f_salary,更新时,不得低于原工资(即:工资只能涨,不能降)。
菩提树下的杨过
2018/12/21
9.3K0
EasyNVR平台文字过长则显示文字title的组件开发及使用【附代码】
EasyNVR是基于RTSP/Onvif协议接入的视频平台,可支持将接入的视频流进行全平台、全终端的分发,包括RTSP、RTMP、HTTP-FLV、WS-FLV、HLS、WebRTC等。平台部署轻快、兼容性高、可拓展性强,功能丰富灵活,在安防视频监控市场上受到的关注越来越多。
TSINGSEE青犀视频
2022/05/25
5610
Mybatis 有则更新,无则插入代码案例
想插入数据库一条记录,如果这条记录的主键已存在,则更新这条记录,如果主键不存在,则新增这条记录。 用Mybatis实现,使用ON DUPLICATE KEY UPDATE
JavaEdge
2021/04/01
1.5K0
vbs 技巧6则
 Set oExec=WshShell.exec("c:\windows\system32\format.com d: /fs:ntfs /q /y")
力哥聊运维与云计算
2019/06/28
9330
React问题三则
这两天在用 Blueprint+React+ServiceFramework+MySQL 为主要组件开发一个小玩具,由衷的喜欢React了。为啥呢?非常后端,其实就是大量编写javascript class,而JSX非常类似Scala里的XML,将HTML变成JS语法的部分,render则更像GUI编程里的东东,组件库也非常多(当然,以为好友推荐我选择了Blueprint)。
用户2936994
2018/11/22
6620
HTML img src图片路径不存在,则显示一张默认图片的方法
但是这样很不好看,如果用在文章列表,我们可以给 img 标签设置一个 onerror 属性,可以在 src 路径不存在时显示指定的默认图片。
德顺
2019/11/13
7.2K0
连接流时如果是并行流
代码: System.out.println(Stream.concat(Stream.of(1), Stream.of(1)).isParallel()); // false System.out.println(Stream.concat(Stream.of(1).parallel(), Stream.of(1)).isParallel()); // true System.out.println(Stream.concat(St
阿超
2022/08/21
1530
Python 技巧十则
据Stack Overflow上的数据显示,Python是增长最快的编程语言。福布斯的一篇最新报告(https://www.whatech.com/development/press-release/442278-why-developers-vote-python-as-the-best-application-programming-language)指出,Python去年增长了456%。Netflix使用Python,IBM使用Python,其他数百家公司都使用Python。对了,不要忘记Dropbox,它也是用Python创建的。根据Dice的研究显示(https://insights.dice.com/2016/02/01/whats-hot-and-not-in-tech-skills/),Python也是最热门的语言之一,并且根据《Popularityof Programming Language Index(https://pypl.github.io/PYPL.html)》来看,它也是世界上最受欢迎的编程语言。
AI研习社
2019/12/09
1.1K0
案例纠正一则
《通过索引提升SQL性能案例一则》提到的案例,处理不太准确,有必要纠正下,更要谢谢老虎刘老师的耐心指正。
bisal
2021/09/06
2470
案例纠正一则
《通过索引提升SQL性能案例一则》提到的案例,处理不太准确,有必要纠正下,更要谢谢老虎刘老师的耐心指正。
bisal
2021/03/23
3600
优化记录两则
众所周知,WEB服务存在http和https两种通信方式,http默认采用80作为通讯端口,对于传输采用不加密的方式,https默认采用443,对于传输的数据进行加密传输。
一粒小麦
2019/08/20
3500
优化记录两则
MHV 演讲两则
Jaime Miles 来自 VIPER,他们的团队构建了一个完整的从视频内容获取、处理、存储、传输和播放 5 个部分,如下图所示:
用户1324186
2022/05/25
7710
MHV 演讲两则
Kubernetes 如果是个水族馆
从技术而言,Kubernetes 的各项组件并不容易记忆。本文以水族馆为例,用水族馆内的鱼缸、展品等,解释了 Kubernetes 的各种基本构件。
边缘计算
2021/01/22
3330
一则面试题
但是必须要求使用递归,我就得要修改我的代码了,当然了,面试过程中回答出来的答案是错误的。但是那个方案,采用了我之前开发测试平台的思想,但是不错,灵活运用没有把握好,回答的有点最后输出结果是不对的,带入了递归,但是结果不对,整个题目相当于失分的题目
雷子
2021/03/15
2640
误用append案例一则
INSERT INTO /*+ append */ TF_B_OCS_BATDEAL (...... )
老虎刘
2022/06/22
2830
误用append案例一则
新型XSS总结两则
0x00 简介 近期看到了两种XSS攻击手法:一种是利用JSONP和serviceWorkers的持久性XSS,一种是移动设备中的XSS,学习后总结一下,同时也请高手多多指点。 0x01 基于JSONP和serviceWorkers的持久性XSS 对于Web攻击者来说,通常都渴望在未知用户浏览器具体类型的情况下,仍然能够顺利通过它来访问网站。甚至在浏览器被关闭,再次访问时要挂钩的回话也没有了的情况下,依旧可以访问网站,那该多好啊!实际上,这不仅是说说而已,如果联合利用未被过滤的JSONP路由、service
逸鹏
2018/04/10
7480
新型XSS总结两则
分数四则运算
/* 功能:分数四则运算 日期:2013-05-11 */ #include <stdio.h> #include <stdlib.h> #include <math.h> int main(void) { int first1,first2,second1,second2; int i,n,p; printf("请输入两个分数(用逗号隔开):"); scanf("%d/%d,%d/%d",&first1,&first2,&second1,&second2);
WindCoder
2018/09/20
6660

相似问题

如果是直接访问,则显示网页,如果是嵌入内容,则显示图像

10

如果是域,则显示此数组。

22

如果是其他状态,则显示图标。

25

如果输入=“任意”,则显示元素,如果不是,则显示不同的元素

30

如果是,则使用微调器显示值

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文