Android开发:如何将多个参与者EditText的值存入List<String>并传递至Meeting对象实现提交与展示
解决方案:收集参与者邮箱并在RecyclerView展示
没问题,我来一步步帮你实现这个功能:
1. 先修正示例代码中的参与者列表写法
首先注意你的DummyMeetingGenerator里的参与者列表写法有问题——原代码把所有邮箱放在一个字符串里,这会导致List只有一个元素。正确的写法应该是每个邮箱单独作为List的一个元素:
public abstract class DummyMeetingGenerator { public static List<String> participants = Arrays.asList( "nouveau@gmail.com", "ancien@gmail.com", "super@gmail.com", "nul@gmail.com" ); public static List<Meeting> DUMMY_MEETINGS = Arrays.asList( new Meeting(1, "14:00", "Room A", " Future Project ", participants ) ); static List<Meeting> generateMeetings() { return new ArrayList<>(DUMMY_MEETINGS); } }
2. 修改AddMeetingActivity,收集参与者邮箱到List
在addMeeting()方法里,我们需要把四个EditText的内容收集到List<String>中,同时过滤掉空输入(避免无效的空字符串加入列表):
@BindView(R.id.my_toolbar2) Toolbar mToolbar; @BindView(R.id.in_time) EditText txtTime; @BindView(R.id.in_place) EditText txtPlace; @BindView(R.id.in_comment) EditText txtComment; @BindView(R.id.participant) EditText txtParticipant; @BindView(R.id.participant2) EditText txtParticipant2; @BindView(R.id.participant3) EditText txtParticipant3; @BindView(R.id.participant4) EditText txtParticipant4; @OnClick(R.id.create) void addMeeting(){ // 初始化参与者列表 List<String> participants = new ArrayList<>(); // 逐个获取输入框内容,仅添加非空文本 addIfNotEmpty(participants, txtParticipant.getText().toString().trim()); addIfNotEmpty(participants, txtParticipant2.getText().toString().trim()); addIfNotEmpty(participants, txtParticipant3.getText().toString().trim()); addIfNotEmpty(participants, txtParticipant4.getText().toString().trim()); // 创建Meeting对象,传入参与者列表 Meeting meeting = new Meeting( System.currentTimeMillis(), txtTime.getText().toString().trim(), txtPlace.getText().toString().trim(), txtComment.getText().toString().trim(), participants ); mApiService.createMeeting(meeting); finish(); } // 辅助方法:过滤空字符串 private void addIfNotEmpty(List<String> list, String text) { if (!text.isEmpty()) { list.add(text); } }
3. 确保Meeting类支持参与者列表参数
你的Meeting类需要更新构造函数,添加List<String>类型的参与者参数,同时提供getter方法供RecyclerView Adapter使用:
public class Meeting { private long id; private String time; private String place; private String comment; private List<String> participants; // 更新构造函数,加入参与者列表 public Meeting(long id, String time, String place, String comment, List<String> participants) { this.id = id; this.time = time; this.place = place; this.comment = comment; this.participants = participants; } // 提供getter方法 public List<String> getParticipants() { return participants; } // 根据需求添加其他getter/setter方法 }
4. 调整RecyclerView Adapter,展示参与者列表
在你的Meeting列表Adapter中,把List<String>转成适合展示的字符串格式,然后设置到TextView中。这里提供两种常用的展示方式:
方式一:逗号分隔展示
@Override public void onBindViewHolder(MeetingViewHolder holder, int position) { Meeting meeting = meetingList.get(position); // 设置其他字段(时间、地点等) holder.timeTv.setText(meeting.getTime()); holder.placeTv.setText(meeting.getPlace()); // 处理参与者列表:转成逗号分隔的字符串 List<String> participants = meeting.getParticipants(); String participantsText = String.join(", ", participants); holder.participantsTv.setText(participantsText); }
方式二:每行一个邮箱(换行分隔)
@Override public void onBindViewHolder(MeetingViewHolder holder, int position) { Meeting meeting = meetingList.get(position); // 设置其他字段... List<String> participants = meeting.getParticipants(); String participantsText = String.join("\n", participants); holder.participantsTv.setText(participantsText); // 可以给TextView添加android:maxLines="4"属性限制行数 }
5. 确认API接口兼容性
最后要确保你的mApiService.createMeeting()方法已经更新,能够接收包含参与者列表的Meeting对象,同时后端接口也能正确解析这个List参数。
内容的提问来源于stack exchange,提问作者Hwoarang54
相关产品推荐
相关产品推荐

