Android 将RecyclerView适配器中的所有Edittext值返回到主活动
我想问一下,是否有办法将EditText的所有当前值从RecyclerView适配器返回到主活动 更新按钮耦合在活动中,而计划列表位于RecyclerView适配器上。用户可以更新计划,我希望在用户提交按钮时获得数组中的所有edittext值 这是我的活动代码 公共类ClinicScheduleListActivity扩展BaseActivity实现UpdateClinicListener{Android 将RecyclerView适配器中的所有Edittext值返回到主活动,android,android-recyclerview,Android,Android Recyclerview,我想问一下,是否有办法将EditText的所有当前值从RecyclerView适配器返回到主活动 更新按钮耦合在活动中,而计划列表位于RecyclerView适配器上。用户可以更新计划,我希望在用户提交按钮时获得数组中的所有edittext值 这是我的活动代码 公共类ClinicScheduleListActivity扩展BaseActivity实现UpdateClinicListener{ @BindView(R.id.clinicScheduleToolbar) Toolba
@BindView(R.id.clinicScheduleToolbar)
Toolbar clinicScheduleToolbar;
@BindView(R.id.clinicScheduleRecyclerView)
RecyclerView clinicScheduleRecyclerView;
@BindView(R.id.updateClinicScheduleBt)
Button updateClinicScheduleBt;
ClinicScheduleAdapter clinicScheduleAdapter;
ClinicResult clinicResult;
ClinicPresenterImpl clinicPresenterImpl;
// UpdateScheduleModel updateScheduleModel;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.clinic_schedules_main_layout);
ButterKnife.bind(this);
// updateScheduleModel = new UpdateScheduleModel();
setUpToolbar();
clinicResult = Parcels.unwrap(getIntent().getParcelableExtra("clinic_schedules"));
setUpView();
if (clinicPresenterImpl == null) {
clinicPresenterImpl = new ClinicPresenterImpl(this);
}
}
void setUpView() {
clinicScheduleAdapter = new ClinicScheduleAdapter(this, clinicResult, this);
clinicScheduleRecyclerView.setAdapter(clinicScheduleAdapter);
clinicScheduleAdapter.notifyDataSetChanged();
Utilities.setUpRecyclerView(this, clinicScheduleRecyclerView);
}
void setUpToolbar() {
setSupportActionBar(clinicScheduleToolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setTitle("Clinic Schedule");
}
}
这是我的适配器代码
public class ClinicScheduleAdapter extends RecyclerView.Adapter {
ClinicScheduleListActivity mContext;
List<ClinicSchedules> schedulesList;
private static UpdateClinicListener mCallback;
public static String day, startTime, endTime;
static boolean isOpen;
ClinicScheduleAdapterViewHolder scheduleAdapterViewHolder;
static UpdateScheduleModel updateScheduleModel = new UpdateScheduleModel();
public ClinicScheduleAdapter(ClinicScheduleListActivity context, ClinicResult clinicResult, UpdateClinicListener listener) {
mContext = context;
schedulesList = clinicResult.getSchedules();
mCallback = listener;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(mContext).inflate(R.layout.clinic_schedules_item_layout, parent, false);
scheduleAdapterViewHolder = new ClinicScheduleAdapterViewHolder(view);
return scheduleAdapterViewHolder;
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
scheduleAdapterViewHolder = (ClinicScheduleAdapterViewHolder) holder;
ClinicSchedules result = schedulesList.get(position);
scheduleAdapterViewHolder.scheduleSwitchButton.setChecked(result.getIsOpen() == true ? true : false);
scheduleAdapterViewHolder.dateTextView.setText(result.getDay());
scheduleAdapterViewHolder.startDateEditText.setText(Utilities.formatTime(result.getStartTime()));
scheduleAdapterViewHolder.endDateEditText.setText(Utilities.formatTime(result.getEndTime()));
updateData();
scheduleAdapterViewHolder.setIsRecyclable(true);
scheduleAdapterViewHolder.bindData();
}
void updateData() {
updateScheduleModel.setPrimaryClinic("sad");
updateScheduleModel.setSecretaryName("Test");
updateScheduleModel.setSecretaryContact("092832123");
List<ClinicSchedules> schedulesAttribute = new ArrayList<>();
for (int i = 0; i < schedulesList.size(); i++) {
ClinicSchedules schedule = new ClinicSchedules();
schedule.setId(i);
schedule.setDay(scheduleAdapterViewHolder.dateTextView.getText().toString());
schedule.setStartTime(scheduleAdapterViewHolder.startDateEditText.getText().toString());
schedule.setEndTime( scheduleAdapterViewHolder.endDateEditText.getText().toString());
schedule.setIsOpen(scheduleAdapterViewHolder.scheduleSwitchButton.isChecked() ? true : false);
schedulesAttribute.add(schedule);
}
updateScheduleModel.setSchedulesAttributes(schedulesAttribute);
Gson gson = new Gson();
String j = gson.toJson(updateScheduleModel, UpdateScheduleModel.class);
}
@Override
public int getItemCount() {
return schedulesList.size();
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getItemViewType(int position) {
return position;
}
public class ClinicScheduleAdapterViewHolder extends RecyclerView.ViewHolder {
LinearLayout schedLayout;
Switch scheduleSwitchButton;
TextView dateTextView;
EditText startDateEditText, endDateEditText;
public ClinicScheduleAdapterViewHolder(View v) {
super(v);
schedLayout = v.findViewById(R.id.schedLayout);
scheduleSwitchButton = v.findViewById(R.id.scheduleSwitchButton);
dateTextView = v.findViewById(R.id.dateTextView);
startDateEditText = v.findViewById(R.id.startDateEditText);
endDateEditText = v.findViewById(R.id.endDateEditText);
}
void bindData(){
mContext.updateClinicScheduleBt.setOnClickListener(v -> {
updateData();
});
}
}
}
公共类ClinicScheduleAdapter扩展了RecyclerView.Adapter{
ClinicScheduleListActivity mContext;
列表明细表;
私有静态更新liniclistener mCallback;
公共静态字符串日期、开始时间、结束时间;
静态布尔等参线;
临床医师计划适应者计划适应者计划适应者;
静态UpdateScheduleModel UpdateScheduleModel=新的UpdateScheduleModel();
公共ClinicScheduleAdapter(ClinicScheduleListActivity上下文、ClinicResult ClinicResult、UpdateClinicListener侦听器){
mContext=上下文;
schedulesList=clinicResult.getSchedules();
mCallback=侦听器;
}
@非空
@凌驾
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup父级,int-viewType){
视图=布局从(mContext)展开(R.layout.clinic\u schedules\u item\u layout,parent,false);
scheduleAdapterViewHolder=新的临床scheduleAdapterViewHolder(视图);
返回ScheduleAdapterViewer;
}
@凌驾
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder,int位置){
ScheduleAdapterWiholder=(ClinicScheduleAdapterWiholder)持有者;
结果=schedulesList.get(位置);
scheduleAdapterViewHolder.scheduleSwitchButton.setChecked(result.getIsOpen()==true?true:false);
ScheduleAdapterViewer.dateTextView.setText(result.getDay());
scheduleAdapterViewHolder.startDateEditText.setText(Utilities.formatTime(result.getStartTime());
ScheduleAdapterViewWolder.endDateEditText.setText(Utilities.formatTime(result.getEndTime());
更新数据();
scheduleAdapterViewHolder.setIsRecyclable(true);
ScheduleAdapterViewer.bindData();
}
void updateData(){
updateScheduleModel.setPrimaryClinic(“sad”);
updateScheduleModel.setSecretaryName(“测试”);
更新ScheduleModel.setSecretaryContact(“092832123”);
List schedulesAttribute=new ArrayList();
对于(int i=0;iTIA您可以设置广播接收器来接收数据,也可以通过用于启动mainActivity的目的推送数据 只需从recyclerView适配器抓取数据,将数据推送到意图中,然后使用任意一种方法将意图推送到您的活动中 sendBroadcast(意向)或startActivity(意向数据)
如果尚未关闭活动的onNewIntent方法,则可能需要覆盖它OnEditTextChanged接口
public interface OnEditTextChanged {
void onTextChanged(int position, String charSeq);
}
然后您还需要将其包含在适配器的构造函数中
在Adapter.java中
private List<DataHolder> mDataSet;
private OnEditTextChanged onEditTextChanged;
public Adapter(List<DataHolder> myData, OnEditTextChanged onEditTextChanged) {
mDataSet = myData;
this.onEditTextChanged = onEditTextChanged;
}
并像这样在活动中调用适配器
mAdapter = new Adapter(holderList, new OnEditTextChanged() {
@Override
public void onTextChanged(int position, String charSeq) {
//change list data of particular position
}
});
检查此项-&您能在此处解释当前值的含义吗?请发布您的活动和适配器代码HI Kam1234,我的意思是,一旦用户更新了edittext值。例如,用户将周一的开放时间更改为上午10:00,那么我将获得周一到周日所有edittext的当前值。您能添加适配器和活动代码吗你的问题问了很久了?
mAdapter = new Adapter(holderList, new OnEditTextChanged() {
@Override
public void onTextChanged(int position, String charSeq) {
//change list data of particular position
}
});