Android listview的某条item数据一直排在首位的问题

来源:互联网 发布:linux切换到图形界面 编辑:程序博客网 时间:2024/06/10 07:50

   用listview加载数据时,有时候项目里面某些功能需求,需要将某条数据一直排在首位,比如一些默认地址之类的,这时候处理方法可以是:1、服务器返回数据时就先将数据排序好,然后客户端拿到后直接显示;2、客户端拿到数据自己获取到想要排在首位的那条数据,然后将其插到首位

下面说说第二种方法,这种也比较适合当数据量不大的时候可以使用,如何插到首位呢,可以通过list.add(position,value);这里面的position是你想插到哪个位置,value是你的值或者对象

举个例子:

List<String> list = new ArrayList<String>();
    list.add("aa");
    list.add("bb");
    list.add("cc");
    list.add("dd");

这时候我想把“cc”插入到首位,,考虑到项目里面用的可能是一个实体类对象,到时候可能会是通过实体类里面的某个字段来判断是不是我们想要的那个item数据将其排到首位,所以数据量不大时,我们可以遍历list,然后拿到我们想要的那条item数据

for (int i = 0; i < list.size(); i++) {
    String string = list.get(i);
if (string.equals("cc")) {
list.add(0, string);
}
}

这时候如果我们不注意的话,,就会发现执行不下去了,,因为这样造成了一个死循环,这样写法是错误的,因为我们没add一次,list的size就会加1,那样的话就会一直循环下去了,这时候我们应该这样处理,先把size拿出来

int size = list.size();
    for (int i = 0; i < size; i++) {
    String string = list.get(i);
if (string.equals("cc")) {
list.add(0, string);
}
}

这时候可以解决死循环的问题了,,但是另外一个问题又来了,就是打印后发现数据多了,那是因为add之后没有及时remove掉,所以我们应该要这样操作

int size = list.size();
    for (int i = 0; i < size; i++) {
    String string = list.get(i);
if (string.equals("cc")) {
list.add(0, string);
list.remove(i+1);
}
}

这样就能达到我们想要的目的了,,,下面是完整的一个测试方法

public static void test(){
    List<String> list = new ArrayList<String>();
    list.add("aa");
    list.add("bb");
    list.add("cc");
    list.add("dd");
    System.out.println("--111--->>>"+list);
    int size = list.size();
    for (int i = 0; i < size; i++) {
    String string = list.get(i);
if (string.equals("cc")) {
list.add(0, string);
list.remove(i+1);
System.out.println("--->>>"+string);
}
}
    System.out.println("--333--->>>"+list);
   }

好了,,感觉好啰嗦,废话挺多的,,只是想记录一下而已,希望大家看到别吐槽哈。。。嘎嘎

0 0