diffutil sort arrayadapter position

时间:2017-12-04 18:33:09

标签: android recycler-adapter

我们正在尝试对包含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中的项目关联的所有数据

2 个答案:

答案 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