2017-02-06 3 views
0
 @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, но теперь проблема я также хочу, чтобы одни и те же соответствующие изменения в базу данных. Как это сделать?Интеграция с базой данных recyclerview

queuee получает все данные из базы данных queuee является ArrayList, который используется для установки recyclerview адаптера

С уважением Спасибо

+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(); 
0

На мой взгляд, вы можете сделать это по методу OnDestroy в своей деятельности. В частности, во-первых, вы можете получить все свои данные от вашего адаптера, а затем удалить данные в своей базе данных, наконец, вы сможете снова сохранить свои данные, полученные от вашего адаптера. В этот момент последовательность ваших данных - это то, что вы хотите, и этот способ легко кодировать. Я предпочел бы, чтобы вы не обновили свою базу данных в течение onMove, потому что это слишком часто во время перетаскивания, а все данные проще, чем две базы данных.