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.