Android 将回收视图中的项目移动到其他位置

Android 将回收视图中的项目移动到其他位置,android,firebase,android-recyclerview,firebase-realtime-database,firebaseui,Android,Firebase,Android Recyclerview,Firebase Realtime Database,Firebaseui,我在从Firebase数据库填充的RecyclerView中有一个项目列表。我想通过长按和拖动来实现RecyclerView中项目的移动。(类似于谷歌的note应用程序“Keep”) 我已经看到一些其他类似的问题,但我无法找到任何适合我需要的解决方案 下面是一些代码示例 main活动(onCreate) 由于您使用的是FirebaseUI的FirebaseRecyclerAdapter,因此数据将按照您从数据库检索数据的顺序显示 这意味着要对数据进行重新排序,您需要创建一个新的查询或向数据中添加

我在从Firebase数据库填充的RecyclerView中有一个项目列表。我想通过长按和拖动来实现RecyclerView中项目的移动。(类似于谷歌的note应用程序“Keep”)

我已经看到一些其他类似的问题,但我无法找到任何适合我需要的解决方案

下面是一些代码示例

main活动(onCreate)


由于您使用的是FirebaseUI的
FirebaseRecyclerAdapter
,因此数据将按照您从数据库检索数据的顺序显示


这意味着要对数据进行重新排序,您需要创建一个新的查询或向数据中添加一个可用于设置顺序的属性。实现后者的一种常见方法是向记录中添加
索引
属性。然后,当用户将记录拖到其他位置时,您“只”需要更新所有受影响记录的索引。

ahh ok!我明白你的意思!但是我不知道怎么做你说的。如果你能帮我举个小例子就好了!(如果我不打扰的话)Frank是
index
是一个好方法,或者有没有更好的方法可以在记录中添加
index
属性。
 mRecycler = (RecyclerView) findViewById(R.id.messages_list);
    mRecycler.setHasFixedSize(true);



    mManager = new LinearLayoutManager(getApplicationContext());
    mManager.setReverseLayout(false);
    mManager.setStackFromEnd(false);
    mRecycler.setLayoutManager(mManager);


    findViewById(R.id.fab_new_post).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            startActivity(new Intent(RecordActivity.this, NewRecordActivity.class));
        }
    });

    // Set up FirebaseRecyclerAdapter with the Query

    mAdapter = new FirebaseRecyclerAdapter<Record, RecordViewHolder>(Record.class, R.layout.item_record, RecordViewHolder.class, mDatabase.child("user-record").child(getUid())) {
        @Override
        protected void populateViewHolder(final RecordViewHolder viewHolder, final Record model, final int position) {
            final DatabaseReference postRef = getRef(position);

            // Set click listener for the whole post view
            final String postKey = postRef.getKey();
            viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // Launch RecordDetailActivity
                    Intent intent = new Intent(getApplicationContext(), RecordDetailActivity.class);

                    //MANDARE TESTO A POSTDETAILACTIVITY
                    intent.putExtra(RecordDetailActivity.EXTRA_POST_KEY, postKey);
                    intent.putExtra(RecordDetailActivity.TITLE, model.title);
                    intent.putExtra(RecordDetailActivity.BODY, model.body);
                    intent.putExtra(RecordDetailActivity.DATE, model.date);
                    intent.putExtra(RecordDetailActivity.NOTE, model.note);
                    intent.putExtra(RecordDetailActivity.COLOR, model.color);
                    startActivity(intent);
                }
            });
            // Bind Record to ViewHolder, setting OnClickListener for the star button

            viewHolder.bindToPost( model);
public class RecordViewHolder extends RecyclerView.ViewHolder {

public TextView titleView;
public TextView bodyView;
public TextView dateView;
public TextView noteView;
public TextView colorView;
public CardView cardView;


public RecordViewHolder(View itemView) {
    super(itemView);

    titleView = (TextView) itemView.findViewById(R.id.post_title);
    bodyView = (TextView) itemView.findViewById(R.id.post_body);
    dateView = (TextView) itemView.findViewById(R.id.record_item_date);
    noteView = (TextView) itemView.findViewById(R.id.record_item_note);
    colorView = (TextView) itemView.findViewById(R.id.record_item_color);
    cardView = (CardView) itemView.findViewById(R.id.record_item_card);
}

public void bindToPost(Record record) {
    titleView.setText(record.title);
    bodyView.setText(record.body);
    dateView.setText(record.date);
    noteView.setText(record.note);
    colorView.setText(record.color);
}