Java 如何在android中的另一个RecyclerView中将RecyclerView(带有从API获取的数据)显示为列表项?

Java 如何在android中的另一个RecyclerView中将RecyclerView(带有从API获取的数据)显示为列表项?,java,android,android-recyclerview,android-adapter,Java,Android,Android Recyclerview,Android Adapter,想要实现:一个聊天机器人,当用户输入单词“weather”时,它将天气预报作为聊天项目(位于外部RecyclerView中)内的RecyclerView返回 我希望天气信息是实际的聊天项目 我有MessageAdapter和WeatherAdapter,它们分别处理消息和天气预报信息,我很难处理MessageAdapter的onBindViewHolder中的“返回天气预报”案例 rvWeather = findViewById(R.id.rvWeather); // rvWeather is

想要实现:一个聊天机器人,当用户输入单词“weather”时,它将天气预报作为聊天项目(位于外部RecyclerView中)内的RecyclerView返回

我希望天气信息是实际的聊天项目

我有MessageAdapter和WeatherAdapter,它们分别处理消息和天气预报信息,我很难处理MessageAdapter的onBindViewHolder中的“返回天气预报”案例

rvWeather = findViewById(R.id.rvWeather);
// rvWeather is supposed to be inside my item_chat_bot.xml
// but I have to add it to main activity for it to show
rvWeather.setAdapter(weatherAdapter);
// otherwise get No adapter attached; skipping layout
我尝试了许多不同的方法,但都没有成功: , , 制作一个片段,接收来自主要活动的天气数据,我在那里做天气采集和

java.lang.NullPointerException:尝试调用虚拟方法 'java.io.Serializable 空对象上的android.os.Bundle.getSerializable(java.lang.String)“” 参考 位于com.demo.chatbot.WeatherFragment.onCreateView(WeatherFragment.java:25)

我不明白为什么这么复杂。在react native中,只需使用.map或for循环即可。我是不是遗漏了一些明显的东西?

关键是要让天气预报成为一条信息。使用两个for循环(一个在WeatherViewHolder中,一个在onBindViewHolder中)和适配器中的TextView数组处理天气布局。以下是我的适配器代码:

public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
    Message message = messageArrayList.get(position);

    switch (message.getType()) {
        case "weather":
            ((WeatherViewHolder) holder).message.setText(message.getMessage());

            for (int i = 0; i < weatherList.size(); i++) {
                Weather weather = weatherList.get(i);
                Glide
                        .with(context)
                        .load(context.getResources().getIdentifier(
                                "icon_" + weather.getWeatherDetails().get(0).getIcon(),
                                "drawable", context.getPackageName()))
                        .into(((WeatherViewHolder) holder).mWeatherIcon[i]);

                Calendar calendar = new GregorianCalendar();
                calendar.setTime(new java.util.Date((long) weather.getDate() * 1000));
                ((WeatherViewHolder) holder).mDate[i].setText(weekdays[calendar.get(Calendar.DAY_OF_WEEK) % 7]);
                ((WeatherViewHolder) holder).mMaxTemp[i].setText((int) weather.getTemp().getMax() + "°C");
                ((WeatherViewHolder) holder).mMinTemp[i].setText((int) weather.getTemp().getMin() + "°C");
                ((WeatherViewHolder) holder).mWeatherCondition[i].setText(String.valueOf(weather.getWeatherDetails().get(0).getShortDescription()));
            }
            break;
    }
}

public class WeatherViewHolder extends RecyclerView.ViewHolder{
    private LinearLayout weatherLayout;
    private TextView[] mDate = new TextView[weatherList.size()];
    private TextView[] mMaxTemp = new TextView[weatherList.size()];
    private TextView[] mMinTemp = new TextView[weatherList.size()];
    private TextView[] mWeatherCondition = new TextView[weatherList.size()];
    private ImageView[] mWeatherIcon = new ImageView[weatherList.size()];
    TextView message;

    public WeatherViewHolder(View itemView) {
        super(itemView);
        message = itemView.findViewById(R.id.message);
        weatherLayout = itemView.findViewById(R.id.chat_bot_linear_layout);

        for (int i = 0; i < weatherList.size(); i++) {
            View view = View.inflate(context, R.layout.item_weather, null);
            mWeatherIcon[i] = view.findViewById(R.id.imageViewWeatherIcon);
            mDate[i] = view.findViewById(R.id.textViewDate);
            mMaxTemp[i] = view.findViewById(R.id.textViewMaxTemp);
            mMinTemp[i] = view.findViewById(R.id.textViewMinTemp);
            mWeatherCondition[i] = view.findViewById(R.id.textViewWeatherCondition);

            weatherLayout.addView(view);
        }
    }
}
public void onBindViewHolder(final RecyclerView.ViewHolder,int位置){
Message Message=messageArrayList.get(位置);
开关(message.getType()){
“天气”一案:
((WeatherViewHolder)holder.message.setText(message.getMessage());
对于(int i=0;i
如果列表中有数据,则将列表实例传递给另一个RecyclerView,并在另一个RecyclerView的适配器实例上调用notifyDataSetChanged
public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
    Message message = messageArrayList.get(position);

    switch (message.getType()) {
        case "weather":
            ((WeatherViewHolder) holder).message.setText(message.getMessage());

            for (int i = 0; i < weatherList.size(); i++) {
                Weather weather = weatherList.get(i);
                Glide
                        .with(context)
                        .load(context.getResources().getIdentifier(
                                "icon_" + weather.getWeatherDetails().get(0).getIcon(),
                                "drawable", context.getPackageName()))
                        .into(((WeatherViewHolder) holder).mWeatherIcon[i]);

                Calendar calendar = new GregorianCalendar();
                calendar.setTime(new java.util.Date((long) weather.getDate() * 1000));
                ((WeatherViewHolder) holder).mDate[i].setText(weekdays[calendar.get(Calendar.DAY_OF_WEEK) % 7]);
                ((WeatherViewHolder) holder).mMaxTemp[i].setText((int) weather.getTemp().getMax() + "°C");
                ((WeatherViewHolder) holder).mMinTemp[i].setText((int) weather.getTemp().getMin() + "°C");
                ((WeatherViewHolder) holder).mWeatherCondition[i].setText(String.valueOf(weather.getWeatherDetails().get(0).getShortDescription()));
            }
            break;
    }
}

public class WeatherViewHolder extends RecyclerView.ViewHolder{
    private LinearLayout weatherLayout;
    private TextView[] mDate = new TextView[weatherList.size()];
    private TextView[] mMaxTemp = new TextView[weatherList.size()];
    private TextView[] mMinTemp = new TextView[weatherList.size()];
    private TextView[] mWeatherCondition = new TextView[weatherList.size()];
    private ImageView[] mWeatherIcon = new ImageView[weatherList.size()];
    TextView message;

    public WeatherViewHolder(View itemView) {
        super(itemView);
        message = itemView.findViewById(R.id.message);
        weatherLayout = itemView.findViewById(R.id.chat_bot_linear_layout);

        for (int i = 0; i < weatherList.size(); i++) {
            View view = View.inflate(context, R.layout.item_weather, null);
            mWeatherIcon[i] = view.findViewById(R.id.imageViewWeatherIcon);
            mDate[i] = view.findViewById(R.id.textViewDate);
            mMaxTemp[i] = view.findViewById(R.id.textViewMaxTemp);
            mMinTemp[i] = view.findViewById(R.id.textViewMinTemp);
            mWeatherCondition[i] = view.findViewById(R.id.textViewWeatherCondition);

            weatherLayout.addView(view);
        }
    }
}