我正在使用自定义适配器来填充ListView
。
使用查询检索数据到远程数据库。
我在查询结果的自定义适配器中进行迭代,然后使用notifyDataSetChanged()
对象包含值String TimeUpdated(DateTime类)。
我想根据TimeUpdated值对列表视图中的对象进行排序。
根据我的阅读,我必须在我的迭代中执行此操作,然后再调用'notifyDataSetChanged();'在我的适配器内。
但我不知道该怎么做。
如果我的理解是正确的,有人可以共享示例代码吗?
关心社区
更新时间:08/10/2015
我想我必须从查询结果的迭代中在我的适配器中创建一个arrayList。
所以我这样做了: 1.I迭代我的查询结果并将每个对象放在arrayList中。 所以我有一个包含对象的arraylist。 2.每个对象都有一个包含“纬度,经度”的字符串值。
我想从远离我的地方对它们进行排序。
距离的计算已经开始。
我现在想不出办法对列表进行排序?
private void sortMyList(List<Document> resultsArray) {
Collections.sort(resultsArray, new Comparator<Document>() {
@Override
public int compare(Document doc1, Document doc2) {
String DistanceDoc1 = Double.toString(calculateDistance(location.getLongitude(),location.getLatitude(), getDocLng(doc1), getDocLat(doc1)));
String DistanceDoc2 = Double.toString(calculateDistance(location.getLongitude(),location.getLatitude(), getDocLng(doc2), getDocLat(doc2)));
return DistanceDoc1.compareToIgnoreCase(DistanceDoc2);
}
});
notifyDataSetChanged();
}
重要提示:
我使用两个适配器来构造包含查询结果的ListView。
父母名为LiveQueryAdapter
,从BaseAdapter
延伸。
片段中的一个称为DocumentAdapter
...,其范围从LiveQueryAdapter
LiveQueryAdapter类
public class LiveQueryAdapter extends BaseAdapter {
public String TAG = "LiveQueryAdapter";
private LiveQuery query;
private QueryEnumerator enumerator;
private Context context;
int i;
public LiveQueryAdapter(Context context, LiveQuery query) {
this.context = context;
this.query = query;
query.addChangeListener(new LiveQuery.ChangeListener() {
@Override
public void changed(final LiveQuery.ChangeEvent event) {
((Activity) LiveQueryAdapter.this.context).runOnUiThread(new Runnable() {
@Override
public void run() {
enumerator = event.getRows();
***I am thinking about iterate and sort objects here...***
notifyDataSetChanged();
}
});
}
});
query.start();
}
@Override
public void notifyDataSetChanged() {
//do your sorting here
super.notifyDataSetChanged();
}
@Override
public int getCount() {
return enumerator != null ? enumerator.getCount() : 0;
}
@Override
public Object getItem(int i) {
return enumerator != null ? enumerator.getRow(i).getDocument() : null;
}
@Override
public long getItemId(int i) {
return enumerator.getRow(i).getSequenceNumber();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
return null;
}
public void invalidate() {
if (query != null)
query.stop();
}
}
DocumentAdapter类(我的片段内部类)
private class DocumentAdapter extends LiveQueryAdapter {
public DocumentAdapter(Context context, LiveQuery matchQuery) {
super(context, matchQuery);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) parent.getContext().
getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.custom_item_matches_fragment, null);
}
final Document doc = (Document) getItem(position);
Log.i(TAG, "doc is : " + doc.getProperty("userId"));
if (doc == null || doc.getCurrentRevision() == null) {
return convertView;
}
HERE I DO SET VIEWS IN MY LAYOUT (TEXT & PICTURES)
return convertView;
}
}
在我的片段中:
在我的Fragment的onCreateView()
中调用此适配器,如下所示:
mAdapter = new DocumentAdapter(getActivity(), matchQuery);
// Set the adapter
mListView = (ListView) view.findViewById(R.id.listview_matches);
mListView.setAdapter(mAdapter);
// Set OnItemClickListener so we can be notified on item clicks
mListView.setOnItemClickListener(this);
答案 0 :(得分:0)
也许这可以帮助
class myAdapter extends BaseAdapter {
private List<String> mList;
public void setList(List<String> list){
mList.clear();
mList.addAll(list);
sortMyList();
}
private void sortMyList() {
//Do sorting of the list
notifyDataSetChanged();
}
@Override
public int getCount() {
return 0;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
return null;
}
}
然后你可以打电话
myAdapter.setList(list);
将设置列表并对其进行排序。
<强>分拣:强>
Collections.sort(empList, new Comparator<Employee>(){
public int compare(Employee emp1, Employee emp2) {
return emp1.getFirstName().compareToIgnoreCase(emp2.getFirstName());
}
});
取自此处:Android-java- How to sort a list of objects by a certain value within the object