Как передать строку из string.xml через RecyclerView

#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);