【问题标题】:Passing data with "putExtra" in Recyclerview在 Recyclerview 中使用“putExtra”传递数据
【发布时间】:2018-01-15 16:11:18
【问题描述】:

我想使用类 recyclerview 适配器将一些细节数据从我的模型传递到另一个活动。

适配器代码:

public class Tab1RecyclerAdapter extends 
RecyclerView.Adapter<Tab1RecyclerAdapter.MyViewHolder> {

private Context context;
private List<Tab1BookModel> bookList;
private LayoutInflater inflater;

public Tab1RecyclerAdapter(Context context, List<Tab1BookModel> bookList) {
    inflater = LayoutInflater.from(context);
    this.context = context;
    this.bookList = bookList;
}

@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = inflater.inflate(R.layout.book_list_item, parent, false);
    MyViewHolder holder = new MyViewHolder(view);
    return holder;
}

@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
    Tab1BookModel book = bookList.get(position);
    holder.setData(book, position);
}

@Override
public int getItemCount() {
    return bookList.size();
}

class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    private ImageView downloadIcon;
    private TextView bookTitle, bookAuthor;
    private View container;
    private int position;
    private Tab1BookModel book;

    MyViewHolder(View view) {
        super(view);
        itemView.setOnClickListener(this);
        bookTitle = (TextView) view.findViewById(R.id.book_title);
        bookAuthor = (TextView) view.findViewById(R.id.book_author);
        downloadIcon = (ImageView) view.findViewById(R.id.download_icon);
        //            downloadIcon.setOnClickListener(this);
        container = view.findViewById(R.id.container_book_list_item);
        container.setOnClickListener(this);
    }

    void setData(Tab1BookModel book, int position) {
        this.bookTitle.setText(book.getTab1BookTitle());
        this.bookAuthor.setText(book.getTab1BookAuthor());
        this.position = position;
        this.book = book;
    }

OnClick 方法:

    @Override
    public void onClick(View view) 
    {
        int position = getAdapterPosition();
        if (position != RecyclerView.NO_POSITION)
        {
            Intent intent = new Intent(context, BookReaderActivity.class);
            intent.putExtra("content", bookList.get(position).getTab1BookContent());
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(intent);
        }
    }
}

}

模型代码:

public class Tab1BookModel {

private int bookTitle;
private int bookAuthor;
private int bookContent;

public int getTab1BookTitle() {
    return bookTitle;
}

public void setBookTitle(int bookTitle) {
    this.bookTitle = bookTitle;
}

public int getTab1BookAuthor() {
    return bookAuthor;
}

public void setBookAuthor(int bookAuthor) {
    this.bookAuthor = bookAuthor;
}

public int getTab1BookContent() {
    return bookContent;
}

public void setBookContent(int bookContent) {
    this.bookContent = bookContent;
}

public static List<Tab1BookModel> getObjectList() {

    List<Tab1BookModel> dataList = new ArrayList<>();
    int[] title = getTitle();
    int[] author = getAuthor();
    int[] content = getContent();

    for (int i = 0; i < title.length; i++) {
        Tab1BookModel books = new Tab1BookModel();
        books.setBookTitle(title[i]);
        books.setBookAuthor(author[i]);
        books.setBookContent(content[i]);
        dataList.add(books);
    }
    return dataList;
}

private static int[] getTitle() {
    int[] title = {
            R.string.title_1, R.string.title_2, R.stringtitle_3,
            R.string.title_4, R.string.title_5, R.string.title_6,
            R.string.title_7, R.string.title_8, R.string.title_9
    };
    return title;
}

private static int[] getAuthor() {
    int[] author = {
            R.string.author_1, R.string.author_2, R.string.author_3,
            R.string.author_4, R.string.author_5, R.string.author_6,
            R.string.author_7, R.string.author_8, R.string.author_9
    };
    return author;
}

数据列表,我需要从中将一个项目传递给另一个活动:

private static int[] getContent() {
    int[] content = {
            R.string.book_1, R.string.book_2, R.string.book_3,
            R.string.book_4, R.string.book_5, R.string.book_6,
            R.string.book_7, R.string.book_8, R.string.book_9
    };
    return content;
}

}

Activity,我想在其中传递一些数据:

public class BookReaderActivity extends AppCompatActivity {

TextView bookContent;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_book_reader);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    bookContent = (TextView) findViewById(R.id.book_content);

    bookContent.setText(getIntent().getExtras().getString("content"));
}

}

【问题讨论】:

  • 您的 BookReaderActivity.class 是什么样的?也许数据已传递,但该类没有收到它。
  • 我添加了 BookReaderActivity.class 的描述
  • 请查看我的回答

标签: java android model android-recyclerview adapter


【解决方案1】:

由于传递的是String资源id,所以需要先获取带有资源id的String,像这样:

String stringBookContent = getResources().getString(getIntent().getIntExtra("content", 0));
bookContent.setText(stringBookContent);

将它添加到 BookReaderActivity 类中。

【讨论】:

  • 效果很好,谢谢!但问题实际上并不在于首先获取 String id。您也可以像这样编写 'bookContent.setText(getIntent().getIntExtra("content", 0));'它将与您的解决方案一样完美。但无论如何,谢谢,我对这个问题有这样的想法。来自俄罗斯的爱!
  • 哈哈,好的,我明白了。我并没有真正测试它,实际上,它只是最安全的实现方式。干杯!
【解决方案2】:

尝试登录您的 OnClick 方法以确认它已被调用,然后在您的 Activity 中您可以将数据返回为

getIntent.getIntExtra("content");

【讨论】:

  • Android Studio 写道,String 不能使用“getIntExtra”
猜你喜欢
  • 2020-12-06
  • 2018-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-18
  • 1970-01-01
相关资源
最近更新 更多