【发布时间】:2017-05-23 11:44:44
【问题描述】:
我是 Android 开发新手,我正在尝试对 Recyclerview 中的项目位置进行排序,我正在使用领域数据库,我的适配器数据集是 RealmResults<ShoppingList>
这是我的Adapter 请看看我的moveItemDown 和updateItemPosition 方法我试图在updateItemPosition 方法中更新项目位置,但它不起作用。我还在适配器下方附上了我的视图
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.MyViewHolder> {
private RealmResults<ShoppingList> dataList;
private Realm mRealm;
private LayoutInflater mInflater;
public RecyclerAdapter(Context context, RealmResults<ShoppingList> data, Realm reamDatabaseInstence){
this.dataList = data;
this.mInflater = LayoutInflater.from(context);
mRealm = reamDatabaseInstence;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
Log.i("Recycler", "onCreateViewHolder");
View view = mInflater.inflate(R.layout.shopping_list_item, parent,false);
MyViewHolder holder = new MyViewHolder(view);
return holder;
}
@Override
public int getItemCount() {
return dataList.size();
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
Log.i("Recycler", "onBindViewHolder " + position);
ShoppingList currentItem = dataList.get(position);
holder.setData(currentItem, position);
holder.setListener();
}
public void moveItemDown(int position){
if( position == (dataList.size()-1) ) { return; }
int oi = position;
int ni = position+1;
updateItemPosition(oi, ni);
notifyDataSetChanged();
}
public void moveItemUp(int position){
// Need to implement after down sort work
}
private void updateItemPosition(final int pos, final int new_pos){
mRealm.executeTransactionAsync(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
ShoppingList old_item = realm.where(ShoppingList.class)
.equalTo("position", pos)
.findFirst();
old_item.setPosition(new_pos);
Log.d("UpdateData: ",old_item.getTitle()+" "+old_item.getPosition());
ShoppingList new_item = realm.where(ShoppingList.class)
.equalTo("position", new_pos)
.findFirst();
new_item.setPosition(pos);
Log.d("UpdateData: ",new_item.getTitle()+" "+new_item.getPosition());
}
});
}
class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
TextView title;
ImageButton up, down;
ImageView image;
int position;
ShoppingList current;
MyViewHolder(View itemView) {
super(itemView);
title = (TextView) itemView.findViewById(R.id.shopping_card_view_title);
image = (ImageView) itemView.findViewById(R.id.shopping_card_view_image);
up = (ImageButton) itemView.findViewById(R.id.shopping_card_view_up_btn);
down = (ImageButton) itemView.findViewById(R.id.shopping_card_view_down_btn);
}
void setData(ShoppingList i, int position) {
title.setText( i.getTitle() );
image.setImageResource(i.getImageId());
this.position = position;
this.current = i;
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.shopping_card_view_up_btn:
moveItemUp(position);
break;
case R.id.shopping_card_view_down_btn:
moveItemDown(position);
break;
}
}
void setListener() {
up.setOnClickListener(MyViewHolder.this);
down.setOnClickListener(MyViewHolder.this);
}
}
}
【问题讨论】:
标签: android android-recyclerview realm