2017-02-06 6 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; 
     } 

Mit dem obigen Code kann ich die Elemente in der Recyclerview tauschen, aber jetzt ist das Problem, ich möchte auch die gleichen entsprechenden Änderungen an der Datenbank machen. Wie geht es?Integrieren von Recyclerview mit Datenbank

queuee empfängt die alle Daten aus der Datenbank queuee ist ein Arraylist, die dem recyclerview Adapter

Grüße Dank

+0

Das hängt sehr davon ab, welche Art von Datenbank Sie haben, und was Ihr Schreib-on-db-Ansatz ist –

Antwort

0

Adapter wird eingestellt:

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()); 
    } 


} 

Aktivität:

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

Meiner Meinung nach können Sie es unter OnDestroy Methode in Ihrer Aktivität tun. Genauer gesagt, erstens, können Sie alle Ihre Daten von Ihrem Adapter bekommen, und dann Daten in Ihrer Datenbank löschen, endlich können Sie Ihre Daten wieder von Ihrem Adapter erhalten speichern. In diesem Moment ist die Reihenfolge Ihrer Daten, was Sie wollen, und dieser Weg ist einfach zu programmieren. Ich würde lieber nicht aktualisieren Sie Ihre Datenbank während onMove, weil es zu oft während des Ziehens ist, und alle Daten sind einfacher als zwei Daten in der Datenbank.