我们正在尝试对包含sqlite数据库中的数据的ArrayList进行排序。 我可以将这个添加到查询中的列表排序"订购" + Col_IDBG +" DESC 除了RecyclerAdapter中的位置数据与DESC排序不同步之外,它可以按预期工作。接下来我们使用Collections.reverse(dbList);这是有效的,但RecyclerAdapter再次与反向订单不同步。
我们已将问题缩小到下面的RecylerAdapter代码。 我们想知道如何使用DiffUtil来保持位置与sort方法同步?
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public TextView station;
public TextView rowid;
public ViewHolder(View itemLayoutView) {
super(itemLayoutView);
rowid = (TextView) itemLayoutView.findViewById(R.id.rvROWID);
station = (TextView)itemLayoutView.findViewById(R.id.rvWEBSITE);
// Attach a click listener to the entire row view
itemLayoutView.setOnClickListener(this);
}
@Override // When an item in ListActivity is touched (selected) the RecyclerView has
// a OnClickListener attached in the above Code that implements the method below
public void onClick(View v) {
Intent intentN = new Intent(context,BuyGasDetailActivity.class);
Bundle extras = new Bundle();
extras.putInt("POSITION",getAdapterPosition());
extras.putString("FROM_LIST_ACTIVITY","false" );
intentN.putExtras(extras);
context.startActivity(intentN);
}
}
将位置传递给DetailActivity以使用intentN查看与ListActivity中的项目关联的所有数据
答案 0 :(得分:1)
这很容易解决你只需要使用Collections.reverse(dbList);在两个地方放置RecyclerAdapter和DetailActivity 这是RecyclerAdapter中的代码
@Override
public int getItemCount() {
Collections.reverse(dbList);
return dbList.size();
}
以下是onCreate方法
中DetailActivity中的代码 dbList = helper.getDataFrom_BUY_GAS_TABLE();
Collections.reverse(dbList);
经过测试并且效果很好
答案 1 :(得分:1)
您可以实施更有效的SortedList
。支持库V7(SortedList
)中提供了android.support.v7.util
。根据文档:
它使用SortedList.Callback.compare(Object,Object)方法保存订购的项目,并使用二进制搜索来检索项目。
效率更高,可以更好地控制添加,插入和放大在排序列表中删除。您所要做的就是将我们的列表切换到适配器中的SortedList,并覆盖3个适配器回调方法:compare()
,areContentsSame()
和areItemsSame()
。您可以找到有关其使用情况的更多详细信息here。