使用适配器

时间:2017-05-04 20:37:33

标签: android sorting listview

在我的应用中,我的目标是让用户从他们的图库上传图像,并将其保存在数据库中。每个图像都有一个名称,该名称和图像将显示在列表视图中。列表视图将被分类为类似于手机中的联系人。他们究竟是什么属性的地图,如不同的酒店或度假村,甚至学校,为了交付目的。我有一切按照我想要的方式工作,但由于某种原因我无法将它们按字母顺序排列。我尝试了其他的例子和片段,但没有运气。我的代码如下:

protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.display_hotels);

    db = new DatabaseHandler(this);

    lv = (ListView) findViewById(R.id.list1);
    pic = (ImageView) findViewById(R.id.pic);
    fname = (EditText) findViewById(R.id.txt1);

    final ArrayList<Hotel> hotels = new ArrayList<>(db.getAllHotels());
    data = new dataAdapter(this, hotels);

    Collections.sort(hotels, new Comparator<Hotel>()
    {
        public int compare(Hotel a1, Hotel a2)
        {
            return (a1.toString()).compareTo(a2.toString());
        }
    });

    lv.setAdapter(data);
}

在我将代码放入比较之前:

Collections.sort(hotels, new Comparator<Hotel>()
    {
        public int compare(Hotel a1, Hotel a2)
        {
            return (a1.toString()).compareTo(a2.toString());
        }
    });

它只是按照保存的顺序显示图像。但是有了这段代码,似乎出现了问题。我尝试保存3个不同的房产图像:Westgate Resort,Grand Country Inn和Ozarks学院。出于某种原因,Westgate首先出现,欧扎克斯学院排名第二,Grand Country Inn排名第三。如果我添加相同的图像并将其命名为Grand Country Inn,Westgate Resort将落在列表的底部。这似乎是正确的,但在添加另一个图像后,Westgate将回到顶部。任何帮助将不胜感激!谢谢你的时间。

3 个答案:

答案 0 :(得分:1)

我设法搞清楚了。我没有使用Collections.sort()方法,而是在我的适配器上使用了sort()。

data = new dataAdapter(this, hotels);

    data.sort(new Comparator<Hotel>()
    {
        @Override
        public int compare(Hotel arg0, Hotel arg1)
        {
            return arg0.getFName().compareTo(arg1.getFName());
        }
    });

    data.notifyDataSetChanged();
    lv.setAdapter(data);

我不确定这是不好的做法,但是对于我想要的东西,它是完美的。

答案 1 :(得分:0)

尝试在调用 sort 方法后初始化适配器。

答案 2 :(得分:0)

请考虑添加

data.notifyDataSetChanged()

每次在列表中添加元素时。

您可以做的另一件事是在将每个元素添加到列表中之前对其进行小写。或者试试这段代码

Collections.sort(hotels, new Comparator<Hotel>(){
    public int compare(Hotel a1, Hotel a2)
    {
        return (a1.toString().toLowerCase()).compareTo(a2.toString().toLowerCase());
    }
});