#android #android-recyclerview
#java #Android #android-recyclerview
Вопрос:
У меня есть RecyclerView, который распространяется на макет сетки для отображения изображения и текста, у него есть прослушиватель onclick, который ведет ко второму действию, где у меня есть пара представлений, которые заполняются данными, отправленными адаптером, я получил изображение для передачи и статический текст, который я задаю через
lstItem.add(new Item("Item1","Category",R.strings.item1Des,R.drawable.image1));
Изображение проходит, а строка — нет.
Мой класс адаптера
import android.content.Context;
import android.content.Intent;
import android.support.v7.widget.CardView;
import android.support.v7.widget.RecyclerView;
import android.view.*;
import android.widget.*;
import java.util.List;
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.MyViewHolder> {
private Context mContext ;
private List<Item> mData ;
public RecyclerViewAdapter(Context mContext, List<Item> mData) {
this.mContext = mContext;
this.mData = mData;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view ;
LayoutInflater mInflater = LayoutInflater.from(mContext);
view = mInflater.inflate(R.layout.cardveiw_item_item,parent,false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(MyViewHolder holder, final int position) {
holder.tv_tem_title.setText(mData.get(position).getTitle());
holder.img_item_thumbnail.setImageResource(mData.get(position).getThumbnail());
holder.cardView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(mContext,Item_Activity.class);
// passing data to the book activity
intent.putExtra("Title",mData.get(position).getTitle());
intent.putExtra("Description",mData.get(position).getDescription());
intent.putExtra("Thumbnail",mData.get(position).getThumbnail());
// start the activity
mContext.startActivity(intent);
}
});
}
@Override
public int getItemCount() {
return mData.size();
}
public static class MyViewHolder extends RecyclerView.ViewHolder {
TextView tv_item_title;
ImageView img_item_thumbnail;
CardView cardView ;
public MyViewHolder(View itemView) {
super(itemView);
tv_item_title = (TextView) itemView.findViewById(R.id.book_title_id) ;
img_item_thumbnail = (ImageView) itemView.findViewById(R.id.item_img_id);
cardView = (CardView) itemView.findViewById(R.id.cardview_id);
}
}
}
Мой элемент activity (который открывается после onclick):
private TextView tvtitle,tvdescription,tvcategory;
private ImageView img;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_book_);
tvtitle = (TextView) findViewById(R.id.txttitle);
tvdescription = (EditText) findViewById(R.id.txtDesc);
tvcategory = (TextView) findViewById(R.id.txtCat);
tvdescription.setKeyListener(null);
img = (ImageView) findViewById(R.id.itemthumbnail);
Object clipboardService = getSystemService(CLIPBOARD_SERVICE);
final ClipboardManager clipboardManager = (ClipboardManager)clipboardService;
Button copyButton = (Button)findViewById(R.id.clipboard_copy_button);
// Recieve data
Intent intent = getIntent();
String Title = intent.getExtras().getString("Title");
String Description = intent.getExtras().getString("Description");
int image = intent.getExtras().getInt("Thumbnail") ;
// Setting values
tvtitle.setText(Title);
tvdescription.setText(Description);
img.setImageResource(image);
copyButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) { }
});
}
Мой класс item
public class Item{
private String Title;
private String Category ;
private int Description ;
private int Thumbnail ;
public Item(String title, String category, int description, int thumbnail) {
Title = title;
Category = category;
Description = description;
Thumbnail = thumbnail;
}
public String getTitle() {
return Title;
}
public String getCategory() {
return Category;
}
public int getDescription() {
return Description;
}
public int getThumbnail() {
return Thumbnail;
}
public void setTitle(String title) {
Title = title;
}
public void setCategory(String category) {
Category = category;
}
public void setDescription(int description) {
Description = description;
}
public void setThumbnail(int thumbnail) {
Thumbnail = thumbnail;
}
}
Ответ №1:
В этой строке onBindViewHolder()
в вашем классе адаптера:
intent.putExtra("Description", mData.get(position).getDescription());
mData.get(position).getDescription()
является целым числом, представляющим идентификатор в ресурсах строки. Таким образом, это не фактическая строка.
Измените ее на:
String desc = mContext.getResources().getString(mData.get(position).getDescription());
intent.putExtra("Description", desc);
Ответ №2:
(Опубликовано от имени автора вопроса).
Я использовал getString (R.strings.id) вместо того, чтобы просто R.strings.Id.
Ответ №3:
Поскольку вы передаете id (т.е. int) вашей строки, т.е. R.strings.item1Des
, вы должны сначала получить id из intent extras, а затем получить его значение путем вызова getString(R.strings.item1Des)
метода, в котором вы собираетесь использовать эту строку, например
String Description = getString(intent.getIntExtra("Description",0));
Ответ №4:
это должно сработать. Ваше описание — Int (только ссылка на строковый ресурс)
// Recieve data
Intent intent = getIntent();
String Title = intent.getExtras().getString("Title");
int Description = intent.getExtras().getInt("Description");
int image = intent.getExtras().getInt("Thumbnail") ;
// Setting values
tvtitle.setText(Title);
tvdescription.setText(getString(Description));
img.setImageResource(image);