将recyclerview与数据库集成

时间:2017-02-06 11:48:27

标签: java android database arraylist swap

        @Override
        public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
            Collections.swap(queuee, viewHolder.getAdapterPosition(), target.getAdapterPosition());

            // and notify the adapter that its dataset has changed
            adapterr.notifyItemMoved(viewHolder.getAdapterPosition(), target.getAdapterPosition());
            return true;
        }

使用上面的代码我可以交换recyclerview中的项目,但现在问题是我也想对数据库进行相同的相应更改。 怎么去?

queuee从数据库接收所有数据 queuee是一个arraylist,用于设置recyclerview适配器

此致 感谢

2 个答案:

答案 0 :(得分:0)

适配器:

    public class QueueAdapter extends RecyclerView.Adapter<QueueAdapter.MyViewHolder> {
    private Context mContext;
    public ArrayList<Music> queue;
    MediaPlayer mPlayer = new MediaPlayer();



    public class MyViewHolder extends RecyclerView.ViewHolder {


        public TextView title,tt,artist;
        public Button play,stop;
        public ImageButton option;

        public MyViewHolder(View view) {
            super(view);
            title = (TextView) view.findViewById(R.id.songtitle1);
            artist = (TextView)view.findViewById(R.id.artist1);
            //  play = (Button) view.findViewById(R.id.play);
            // stop = (Button) view.findViewById(R.id.stop);
            // tt = (TextView) view.findViewById(R.id.song_name);
            option = (ImageButton) view.findViewById(R.id.option1);




        }
    }

    public QueueAdapter(Context mContext, ArrayList<Music> queue) {
        this.mContext = mContext;
        this.queue = queue;
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.queue_card, parent, false);

        return new MyViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(final MyViewHolder holder, final int position) {
        Music mu1 = queue.get(position);
        holder.title.setText(mu1.getTitle());
        holder.artist.setText(mu1.getArtist());
        final String link =mu1.getUrl();
        final String SongName = mu1.getTitle();


    }




    @Override
    public int getItemCount() {
        return queue.size();
    }



    public void removeItem(int position) {
        queue.remove(position);
        notifyItemRemoved(position);
        notifyItemRangeChanged(position, queue.size());
    }


}

活性:

 recyclerView = (RecyclerView) findViewById(R.id.recyclerqueue);
    recyclerView.setHasFixedSize(true);

    layoutManager = new LinearLayoutManager(this);
    recyclerView.setLayoutManager(layoutManager);
    recyclerView.setItemAnimator(new DefaultItemAnimator());





    adapterr = new QueueAdapter(this,queuee);
    recyclerView.addItemDecoration(new DividerItemDecoration(this, LinearLayoutManager.VERTICAL));

    // adapterr.
    recyclerView.setAdapter(adapterr);
   initSwipe();

答案 1 :(得分:0)

在我看来,您可以在Activity中的OnDestroy方法上执行此操作。具体来说,首先,您可以从适配器获取所有数据,然后删除数据库中的数据,最后,您可以再次保存从适配器获取的数据。在这一刻,您的数据序列就是您想要的,这种方式很容易编码。我宁愿你不要 在onMove期间更新您的数据库,因为在拖动过程中它太频繁了,并且操作所有数据比数据库中的两个数据更容易。