0

我想问一下是否有办法将 EditText 的所有当前值从 RecyclerView Adapter 返回到 Main Activity。在此处输入图像描述

更新按钮在活动中耦合,而计划列表在 RecyclerView 适配器上。用户可以更新时间表,我想在用户提交按钮时获取数组中的所有 edittext 值。

这是我的活动代码

公共类 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

4

2 回答 2

-1

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;
}
@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
        }
    }); 
于 2019-11-05T14:14:59.277 回答
-1

您可以设置一个 BroadcastReceiver 来接收数据或通过用于启动 mainActivity 的意图推送数据!

只需从 recyclerView 适配器获取数据,将数据推送到意图中,然后使用 sendBroadcast(intent) 或 startActivity(intentWithData) 将意图推送到您的活动

如果您还没有关闭它,您可能需要为您的活动覆盖 onNewIntent 方法

于 2019-11-05T13:45:37.483 回答