我从Firebase数据库中获取了RecyclerView中的项目列表。我想通过长按和拖动来实现RecyclerView内部项目的移动。(类似于Google的记事应用“保持”)
我已经看过其他一些类似的问题,但是找不到适合我需求的解决方案。
以下是一些代码示例。
MainActivity(onCreate)
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);
RecordViewHolder
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);
}
由于您使用的是FirebaseUI FirebaseRecyclerAdapter
,因此数据将按照从数据库中检索的顺序显示。
这意味着要对数据进行重新排序,您将需要创建新查询或向数据中添加可用于设置顺序的属性。后者的一种常见方法是index
在记录中添加一个属性。然后,当用户将一条记录拖到另一个位置时,您将“只是”必须更新所有受影响记录的索引。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句