![](/img/trans.png)
[英]Getting submit button to work for edittext in the recyclerview adapter and main activity
[英]Getting all Edittext value in RecyclerView Adapter back to Main Activity
我想問一下是否有辦法將 EditText 的所有當前值從 RecyclerView Adapter 返回到 Main Activity。
更新按鈕在活動中耦合,而計划列表在 RecyclerView 適配器上。 用戶可以更新時間表,我想在用戶提交按鈕時獲取數組中的所有 edittext 值。
這是我的活動代碼
公共 class ClinicScheduleListActivity 擴展 BaseActivity 實現 UpdateClinicListener {
@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();
});
}
}
}
TIA
您可以設置一個 BroadcastReceiver 來接收數據或通過用於啟動 mainActivity 的意圖推送數據!
只需從 recyclerView 適配器獲取數據,將數據推送到意圖中,然后使用 sendBroadcast(intent) 或 startActivity(intentWithData) 將意圖推送到您的活動
如果您還沒有關閉它,您可能需要為您的活動覆蓋 onNewIntent 方法
OnEditTextChanged 接口
public interface OnEditTextChanged {
void onTextChanged(int position, String charSeq);
}
然后你也需要在適配器的構造函數中包含它。
在適配器中。java
private List<DataHolder> mDataSet;
private OnEditTextChanged onEditTextChanged;
public Adapter(List<DataHolder> myData, OnEditTextChanged onEditTextChanged) {
mDataSet = myData;
this.onEditTextChanged = onEditTextChanged;
}
@Override
public void onBindViewHolder(ViewHolder holder, final int position) {
holder.anameTxtView.setText(mDataSet.get(position).getDname());
holder.abalanceTxtView.setText(mDataSet.get(position).getDbalance());
holder.editTextLeft.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
onEditTextChanged.onTextChanged(position, charSequence.toString());
}
@Override
public void afterTextChanged(Editable editable) {}
});
holder.editTextRight.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
onEditTextChanged.onTextChanged(position, charSequence.toString());
}
@Override
public void afterTextChanged(Editable editable) {}
});
}
並像這樣在您的活動中調用適配器
mAdapter = new Adapter(holderList, new OnEditTextChanged() {
@Override
public void onTextChanged(int position, String charSeq) {
//change list data of particular position
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.