簡體   English   中英

將 RecyclerView Adapter 中的所有 Edittext 值返回到 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM