英文:
How to get the exact position in the recycle view
问题
Sure, here's the translated code portion:
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;
artist.setText(song.getArtist());
final TextView title = holder.titleTxt;
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();
}
});
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) {
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());
}
});
}
}
Please let me know if you need any further assistance!
英文:
> 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());
}
});
}
答案1
得分: 0
Sure, here's the translated code:
// Inside your `onBindViewHolder(...)`
holder.editT.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
editText.setText(songsFiltered.get(position).getTitle()); // 在这里你将获得当前项目,我假设是一个拥有标题的 Song 对象,标题是一个字符串
dialog.show();
}
});
dialog.setButton(DialogInterface.BUTTON_POSITIVE, "保存文本", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
title.setText(editText.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());
}
});
专注分享java语言的经验与见解,让所有开发者获益!
评论