Tôi đang sử dụng danh sách để điền một ListView(). Người dùng có thể thêm các mục vào danh sách. Tuy nhiên, tôi cần các mục được hiển thị ở phía trên cùng của ListView. Làm thế nào để chèn một mục vào đầu danh sách của tôi để hiển thị nó theo thứ tự ngược lại?Hiển thị các mục mới ở đầu một ListView
Trả lời
Có thể bạn nên sử dụng ArrayAdapter
và sử dụng phương thức insert(T, int)
.
Ex:
ListView lv = new ListView(context);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(context, R.id...);
lv.setAdapter(adapter);
...
adapter.insert("Hello", 0);
Tôi vừa loại bỏ danh sách của mình và souly sử dụng bộ điều hợp. Làm việc tuyệt vời! Cảm ơn. – rphello101
Bạn được chào đón! – aymeric
Theo danh sách mặc định, thêm các phần tử ở dưới cùng. Đó là lý do tại sao tất cả các yếu tố mới bạn thêm sẽ hiển thị ở dưới cùng. Nếu bạn muốn nó theo thứ tự ngược, có thể là trước khi thiết để listadapter/xem ngược danh sách
Cái gì như:
Collections.reverse(yourList);
Ý tưởng hay, nhưng tôi tiếp tục thêm các mục vào danh sách và tiếp tục đảo ngược nó, về cơ bản tôi sẽ thêm, theo kiểu xen kẽ, một mục vào mỗi đầu của danh sách. Vì tôi cần phải lưu dữ liệu với SharedPreferences mà chỉ lưu các kiểu dữ liệu cơ bản, nó sẽ là khá rắc rối để theo dõi hai danh sách. – rphello101
tìm thấy whati tôi đang tìm kiếm. thankx – raj
Là tốt, nhưng không hoạt động khi bạn thử với các đối tượng tùy chỉnh + thẻ! – delive
Các ListView hiển thị dữ liệu vì nó được lưu trữ trong nguồn dữ liệu của bạn.
Khi bạn thêm cơ sở dữ liệu của mình, nó phải thêm các phần tử vào cuối. Vì vậy, khi bạn nhận được tất cả các dữ liệu thông qua đối tượng Cursor và gán nó cho ArrayAdapter, nó chỉ theo thứ tự đó. Về cơ bản, bạn nên cố gắng đưa dữ liệu vào đầu cơ sở dữ liệu, thay vào đó cuối cùng, có thể có một số dấu thời gian.
Sử dụng ArrayList, bạn có thể làm điều đó bằng cách Collections.reverse(arrayList)
hoặc nếu bạn đang sử dụng SQLite, bạn có thể sử dụng order by
.
Không, tôi nghĩ rằng điều này là sai. Đối với listview bạn cần phải vượt qua mảng/danh sách như đầu vào. Trong cơ sở dữ liệu trừ khi bạn có dấu thời gian chèn, bạn không thể làm bất cứ điều gì. – kosa
@Nambari: Tôi xin lỗi. Những gì tôi thực sự có nghĩa là để lấy dữ liệu từ cơ sở dữ liệu bằng cách sử dụng một đối tượng Cursor và sau đó đặt nó trong một ArrayAdapter. Một cái gì đó như thế này http://stackoverflow.com/questions/5717732/how-do-i-display-data-from-my-database-in-a-listview. Sẽ cập nhật câu trả lời của tôi. Cám ơn bạn đã góp ý. – Swayam
Bạn luôn có thể có một dấu ngày tháng trong đối tượng của bạn và sắp xếp listview của bạn dựa trên đó ..
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
}
}
tại loại danh sách của bạn
Collections.sort(YourList, new CustomComparator());
này nên sắp xếp danh sách của bạn sao cho mục mới nhất sẽ nằm trên đầu trang
Bạn luôn có thể sử dụng LinkedList thay thế và sau đó sử dụng phương thức addFirst() để thêm các phần tử vào danh sách của bạn và nó sẽ có hành vi mong muốn (các mục mới ở phía trên cùng của ListView).
Một giải pháp mà không sửa đổi danh sách ban đầu, ghi đè phương pháp GetItem() trong Adaptor
@Override
public Item getItem(int position) {
return super.getItem(getCount() - position - 1);
}
Cập nhật: Ví dụ
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;
}
}
Đây là một giải pháp rất thanh lịch. Tôi đã thực hiện một thay đổi nhỏ để tôi có thể sử dụng nó trong ArrayAdapters ẩn danh mà không để lộ các mục dữ liệu: 'return super.getItem (getCount() - 1 - position);' –
Điều này làm việc nhưng khi cuộn mục đầu tiên trong danh sách có vẻ như trùng lặp với danh sách mục cuối cùng. Tôi nghĩ rằng vấn đề này đã làm với việc tái chế các mặt hàng listview (không chắc chắn). –
Bạn có thể cho biết cách ghi đè phương thức getItem() trong bộ điều hợp không? – Apurva
mBlogList là một cái nhìn tái chế ...
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
Bạn có thể thêm phần tử vào đầu danh sách: như
arraylist.add(0, object)
thì nó sẽ luôn hiển thị phần tử mới ở trên cùng.
- 1. Làm mới listview để nó hiển thị selectindex?
- 2. Hiển thị các mục và tiêu đề của ListView
- 3. Hoạt ảnh không bắt đầu trong các mục ListView hiện đang hiển thị
- 4. Android: Tìm mục ListView được hiển thị chiều cao
- 5. Hiển thị gms.maps.MapView mới có độ trễ một chút khi trong một ListView?
- 6. Tạo các danh mục trong một ListView?
- 7. Animate từng mục của Listview khi hiển thị
- 8. Cách hiển thị văn bản "Đang tải ..." khi truy xuất các mục cho một ListView
- 9. Làm cách nào để thêm/xóa các mục vào một ListView ở chế độ ảo?
- 10. Android: ListView, Last item - Hiển thị thêm
- 11. Làm thế nào để hiển thị các chữ cái ở bên cạnh Android ListView
- 12. Hiển thị danh sách tệp trong ListView
- 13. Không hiển thị các thư mục trong đầu ra rsync
- 14. HTML hiển thị của Android trong một ListView
- 15. Danh sách WPF Luôn hiển thị các mục hoàn chỉnh
- 16. Danh sách cuộnViewItem ở trên cùng của một ListView
- 17. Android ListView: lấy chỉ mục dữ liệu của mục hiển thị
- 18. ListView không hiển thị tất cả các mục cho đến khi tương tác với
- 19. Hiển thị đầu công cụ cho mỗi mục trong hàng datagridview khi chuột ở trên nó
- 20. Hiển thị các đầu của một chi nhánh?
- 21. hiển thị một số văn bản khi listview binded không có mục
- 22. PyQt - hiển thị tiện ích ở đầu tiện ích
- 23. MATLAB: hiển thị hình ảnh ở kích thước ban đầu
- 24. iPhone: Hiển thị hình ảnh ở kích thước ban đầu
- 25. Thêm các mục vào một ListView?
- 26. Các mục UIToolbar không hiển thị
- 27. Android: Hiển thị bàn phím ẩn nội dung listview
- 28. Android hiển thị văn bản khi ListView trống
- 29. android - chỉ mục cho ListView?
- 30. JQuery Mobile ListView hiển thị văn bản trên nhiều dòng
Nguồn dữ liệu là gì? Nếu bạn đang đọc nó từ một cơ sở dữ liệu, bạn luôn có thể thay đổi thứ tự truy vấn trả về bằng 'order by' hoặc tương đương. – MrLore