私のアプリでは、私の目標はユーザーがギャラリーから画像をアップロードしてデータベースに保存することです。各画像は名前を持ち、名前と画像はリストビューに表示されます。リストビューは、電話のような連絡先の並べ替えのような種類になります。彼らが提供しているのは、異なるホテルやリゾート、さらには学校などの物件のマップです。私はすべてのことが私が望むように働いていますが、何らかの理由で私はアルファベット順にそれらを得ることができません。私は他の例とスニペットを試しましたが、運がありません。次のように私はそれを持っているコードは次のとおりです。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());
}
});
それは単に彼らが保存された順に画像を表示していました。しかし、このコードでは何かが間違っているようです。 Westgate Resort、Grand Country Inn、College of the Ozarksの順番で3つの異なる画像を保存しようとしました。何らかの理由でWestgateが最初に、College of the Ozarksが2位、Grand Country Innが3位に表彰されました。同じ画像を追加してGrand Country Innの名前を付けても、Westgate Resortはリストの一番下に落ちます。それは正しいようですが、別のイメージを追加すると、Westgateは先頭に戻ります。どんな助けでも大歓迎です!あなたの時間をありがとう。
ホテルオブジェクトの.toString()を比較しようとしています。代わりにホテルのオブジェクトに属性を持たせて、imagestringと言ってそのことを正しく比較できるようにする必要があります。このように、この文字列を与えるtostring関数をオーバーライドしなかった場合は、直接文字列にキャストするときに問題が発生するのが普通です – koksalb