リストを使用してListView()にデータを入力しています。ユーザーはリストにアイテムを追加できます。ただし、リストビューの上部にアイテムを表示する必要があります。リストの先頭にアイテムを挿入して、逆の順序で表示するにはどうすればよいですか?
8 に答える
デフォルトでは、リストは下部に要素を追加します。これが、追加するすべての新しい要素が下部に表示される理由です。逆の順序にしたい場合は、listadapter/viewに設定する前にリストを逆にすることができます
何かのようなもの:
Collections.reverse(yourList);
元のリストを変更せずに別の解決策として、アダプターのgetItem()メソッドをオーバーライドします
@Override
public Item getItem(int position) {
return super.getItem(getCount() - position - 1);
}
更新:例
public class ChatAdapter extends ArrayAdapter<ChatItem> {
public ChatAdapter(Context context, List<ChatItem> chats) {
super(context, R.layout.row_chat, chats);
}
@Override
public Item getItem(int position) {
return super.getItem(getCount() - position - 1);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null) {
convertView = inflater.inflate(R.layout.row_chat, parent, false);
}
ChatItem chatItem = getItem(position);
//Other code here
return convertView;
}
}
おそらく、ArrayAdapter
を使用してinsert(T, int)
メソッドを使用する必要があります。
元:
ListView lv = new ListView(context);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(context, R.id...);
lv.setAdapter(adapter);
...
adapter.insert("Hello", 0);
ListViewは、データソースに保存されているデータを表示します。
データベースに追加するときは、最後に要素を追加する必要があります。したがって、Cursorオブジェクトを介してすべてのデータを取得し、それをArrayAdapterに割り当てる場合、その順序のみになります。基本的には、データベースの最初にデータを配置するのではなく、最後にタイムスタンプを付けることでデータを配置する必要があります。
ArrayListを使用すると、によって実行できます。SQLiteを使用しているCollections.reverse(arrayList)
場合は、を使用できますorder by
。
リストの先頭に要素を追加できます:like
arraylist.add(0, object)
その後、常に新しい要素が上部に表示されます。
mBlogListはリサイクラービューです...
mBlogList=(RecyclerView) findViewById(R.id.your xml file);
mBlogList.setHasFixedSize(true);
LinearLayoutManager mLayoutManager = new LinearLayoutManager(this);
mLayoutManager.setReverseLayout(true);
mLayoutManager.setStackFromEnd(true);
mBlogList.setLayoutManager(mLayoutManager);//VERTICAL FORMAT
オブジェクトには常に日付スタンプを付けて、それに基づいてリストビューを並べ替えることができます。
public class CustomComparator implements Comparator<YourObjectName> {
public int compare(YourObjectName o1, YourObjectName o2) {
return o1.getDate() > o2.getDate() // something like that.. google how to do a compare method on two dates
}
}
リストを並べ替えます
Collections.sort(YourList, new CustomComparator());
これにより、最新のアイテムが一番上になるようにリストを並べ替える必要があります
代わりにいつでもLinkedListを使用してから、addFirst()メソッドを使用して要素をリストに追加すると、目的の動作(ListViewの上部にある新しいアイテム)が得られます。