You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

安卓开发:RecyclerView跳转详情Activity传值文本不显示如何解决

问题原因分析
  • 参数类型不匹配:你在NewsAdapter的点击事件中给title传递的R.string.newsContent1是int类型的字符串资源ID,但NewsDetails中使用getStringExtra()接收,类型不匹配无法获取到正确的值,这是文本不显示的核心原因。
  • 传递参数硬编码:所有条目点击事件都固定传了同一个R.string.newsContent1和R.drawable.newsImage1,即使类型匹配也无法实现不同条目展示不同内容的需求。
  • 实体类字段缺失:当前NewsItem只有新闻标题、封面图两个字段,没有存储对应新闻内容资源ID的字段,无法关联不同条目的详情内容。
修复步骤

1. 扩展NewsItem实体类

添加新闻内容资源ID字段及对应get/set方法:

public class NewsItem {
    String newsName;
    Integer newsImage;
    // 新增字段:存储该条新闻内容对应的字符串资源ID
    Integer newsContentRes;

    public NewsItem(String newsName, Integer newsImage, Integer newsContentRes) {
        this.newsName = newsName;
        this.newsImage = newsImage;
        this.newsContentRes = newsContentRes;
    }

    public String getNewsName() {
        return newsName;
    }

    public void setNewsName(String newsName) {
        this.newsName = newsName;
    }

    public Integer getNewsImage() {
        return newsImage;
    }

    public void setNewsImage(Integer newsImage) {
        this.newsImage = newsImage;
    }

    public Integer getNewsContentRes() {
        return newsContentRes;
    }

    public void setNewsContentRes(Integer newsContentRes) {
        this.newsContentRes = newsContentRes;
    }
}

2. 修改新闻列表页初始化逻辑

创建条目时传入每个新闻对应的内容资源ID:

public class news extends AppCompatActivity {
    RecyclerView newsRecycler;
    NewsAdapter newsAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_news);

        List<NewsItem> newsItems = new ArrayList<>();
        // 依次传入每个新闻的标题、封面图、内容资源ID
        newsItems.add(new NewsItem("新闻标题1", R.drawable.im_maincorpus1, R.string.newsContent1));
        newsItems.add(new NewsItem("新闻标题2", R.drawable.im_maincorpus2, R.string.newsContent2));
        newsItems.add(new NewsItem("新闻标题3", R.drawable.im_maincorpus3, R.string.newsContent3));
        newsItems.add(new NewsItem("新闻标题4", R.drawable.im_maincorpus4, R.string.newsContent4));

        setNewsRecycler(newsItems);
    }
    private void setNewsRecycler(List<NewsItem> newsItemsList){
        newsRecycler = findViewById(R.id.newsRecycler);
        RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this, RecyclerView.VERTICAL, false);
        newsRecycler.setLayoutManager(layoutManager);
        newsAdapter = new NewsAdapter(this, newsItemsList);
        newsRecycler.setAdapter(newsAdapter);
    }
}

3. 调整NewsAdapter点击事件逻辑

传递当前点击条目对应的动态参数,替换硬编码固定值:

@Override
public void onBindViewHolder(NewsViewHolder holder, int position) {
    NewsItem currentNews = newsItemList.get(position);
    holder.newsImage.setImageResource(currentNews.getNewsImage());
    holder.newsName.setText(currentNews.getNewsName());

    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(context, NewsDetails.class);
            // 传递当前点击条目的标题、内容资源ID、封面图资源ID
            intent.putExtra("title", currentNews.getNewsName());
            intent.putExtra("contentRes", currentNews.getNewsContentRes());
            intent.putExtra("image", currentNews.getNewsImage());
            context.startActivity(intent);
        }
    });
}

4. 修改NewsDetails接收逻辑

正确解析资源ID后赋值给对应控件:

public class NewsDetails extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_news_details);

        // 接收传递的参数
        String newsTitle = getIntent().getStringExtra("title");
        int contentRes = getIntent().getIntExtra("contentRes", 0);
        int imageRes = getIntent().getIntExtra("image", 0);

        // 绑定控件
        TextView titleTv = findViewById(R.id.你的详情页标题控件ID);
        TextView contentTv = findViewById(R.id.newsDetailsContent);
        ImageView imageView = findViewById(R.id.newsDetailsImage);

        // 赋值:字符串资源ID需要通过getString()转成文本再设置
        titleTv.setText(newsTitle);
        contentTv.setText(getString(contentRes));
        imageView.setImageResource(imageRes);
    }
}

内容的提问来源于stack exchange,提问作者Akzhan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 21:15:02