简体   繁体   中英

How to get the exact position in the recycle view

I am using a Song Adapter and put all my button OnClickListener inside.The remove button works however the edit buttons doesn't work as it does not know which is the position of the song that needs to be edited

public class SongAdapter extends RecyclerView.Adapter<MyView> implements Filterable {
AlertDialog dialog;
EditText editText;
AlertDialog dialog2;
EditText editText2;

public SongAdapter(List<Song> songs)
{
    this.songs = songs;
    this.songsFiltered = songs;
}

public List <Song> songs;
public List <Song> songsFiltered;

Context context;
@NonNull
@Override
public MyView onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    context = parent.getContext();
    LayoutInflater inflater = LayoutInflater.from(context);
    View songView = inflater.inflate(R.layout.item_song,parent,false);
    MyView viewHolder = new MyView(songView);
    return viewHolder;
}

@Override
public void onBindViewHolder(@NonNull MyView holder, final int position)
{
     Song song = songsFiltered.get(position);
     final TextView artist = holder.titleArtist;

     //edit
     artist.setText(song.getArtist());

     final TextView title = holder.titleTxt;

     //edit
     title.setText(song.getTitle());

     int imageId = AppUtil.getImageIdFromDrawable(context,song.getCoverArt());

     dialog = new AlertDialog.Builder(context).create();
     editText = new EditText(context);

     dialog.setTitle("Edit the Title");
     dialog.setView(editText);

     dialog2 = new AlertDialog.Builder(context).create();
     editText2 = new EditText(context);
     dialog2.setTitle("Edit the Artist");
     dialog2.setView(editText2);

     holder.image.setImageResource(imageId);
     holder.removeBtn.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View view)
         {
             MainActivity.favList.remove(position);
             Gson gson = new Gson();
             String json = gson.toJson(MainActivity.favList);
             SharedPreferences.Editor editor = MainActivity.sharedPreferences.edit();
             editor.putString("list",json);
             editor.apply();
             notifyDataSetChanged();
         }
     });

The problem lies here. I do not know how to get the position so that i can edit the exact song's name

     holder.editT.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View view) {
                 editText.setText(title.getText());
                 dialog.show();
         }
     });

     dialog.setButton(DialogInterface.BUTTON_POSITIVE, "SAVE TEXT", new DialogInterface.OnClickListener() {
         @Override
         public void onClick(DialogInterface dialogInterface, int i) {
             title.setText(editText.getText());
         }
     });

    holder.editA.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            for(int i = 0; i < songs.size(); i++)
            {
                editText2.setText(artist.getText());
                dialog2.show();
            }
        }
    });
    dialog2.setButton(DialogInterface.BUTTON_POSITIVE, "SAVE TEXT", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            artist.setText(editText2.getText());
        }
    });



}

Try this

Inside your onBindViewHolder(...)

holder.editT.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View view) {
                 editText.setText(songsFiltered.get(position).getTitle());//here you will get current item which i assume is Song Object which have title as String
                 dialog.show();
         }
     });

     dialog.setButton(DialogInterface.BUTTON_POSITIVE, "SAVE TEXT", new DialogInterface.OnClickListener() {
         @Override
         public void onClick(DialogInterface dialogInterface, int i) {
             title.setText(editText.getText());
         }
     });

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM