как сохранить введенные пользователем данные в RecyclerView
Всем привет. В базу данных SQLite я добавляю "Сотрудника" при добавлении сотрудника в базу данных пользователь должен заполнить поля которые относятся к сотруднику, например имя, фамилия зарплата и.т.д. У сотрудника есть несколько атрибутов таких как "skill" и "department" этих атрибутов сотрудник может иметь несколько, по этому когда юзер заполняет все поля с атрибутами ему предлагается добавить еще поле например поле "skill" чтоб добавить еще "skill", таких поле "skill" можно добавлять сколько хочешь и я реализовал это с помощью RecyclerView. Но проблема заключается в следующем - когда пользователь хочет добавить еще поле "skill", появляется пустой EditText и юзер заполняет это поле данными, а вот как сохранить эту строку я не знаю, ведь при нажатии add skill в адаптер передается пустая строка затем юзер заполняет эту строку , а вот как сохранить эту строку в список который содержит адаптер я не могу разобраться
Вот это класс адаптер
public class AdapterAddSkill extends RecyclerView.Adapter<AdapterAddSkill.MyViewHolderAddEmployee> {
private ArrayList<String> skillsList;
private Context context;
public AdapterAddSkill(ArrayList<String> skillsList, Context context) {
this.skillsList = skillsList;
this.context = context;
}
@NonNull
@Override
public MyViewHolderAddEmployee onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_skill, parent, false);
return new MyViewHolderAddEmployee(view);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolderAddEmployee holder, final int position) {
holder.closeCard.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
skillsList.remove(position);
notifyDataSetChanged();
}
});
}
@Override
public int getItemCount() {
return skillsList.size();
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getItemViewType(int position) {
return position;
}
public static class MyViewHolderAddEmployee extends RecyclerView.ViewHolder {
private ImageButton closeCard;
private EditText skillEditText;
public MyViewHolderAddEmployee(@NonNull View itemView) {
super(itemView);
closeCard = itemView.findViewById(R.id.deleteSkillCard);
skillEditText = itemView.findViewById(R.id.skillText);
}
}
}
Вот это активити в которой юзер заполняет данные о сотруднике и добавляет его в базу данных
public class AddEmploy extends AppCompatActivity {
private EditText nameEditText, lastNameEditText, employeeIdEditText,
salaryEditText, departmentEditText, skillEditText;
private ArrayList<String> skillsList = new ArrayList<>();
private ArrayList<String> departmentsList = new ArrayList<>();
private AdapterAddSkill adapterAddSkill;
private RecyclerView skillRecyclerView;
private AdapterAddDepartment adapterAddDepartment;
private RecyclerView departmentRecyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_employ);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
nameEditText = findViewById(R.id.name);
lastNameEditText = findViewById(R.id.lastName);
employeeIdEditText = findViewById(R.id.employeeId);
salaryEditText = findViewById(R.id.salary);
departmentEditText = findViewById(R.id.department);
skillEditText = findViewById(R.id.skill);
skillRecyclerView = findViewById(R.id.rv_skill);
departmentRecyclerView = findViewById(R.id.rv_department);
adapterAddSkill = new AdapterAddSkill(skillsList, this);
adapterAddDepartment = new AdapterAddDepartment(departmentsList, this);
skillRecyclerView.setLayoutManager(new LinearLayoutManager(this));
departmentRecyclerView.setLayoutManager(new LinearLayoutManager(this));
skillRecyclerView.setAdapter(adapterAddSkill);
departmentRecyclerView.setAdapter(adapterAddDepartment);
}
public void onClickBtn(View view) {
switch (view.getId()) {
case R.id.addDepartmentText:
departmentsList.add("");
adapterAddDepartment.notifyDataSetChanged();
break;
case R.id.addSkillText:
skillsList.add("");
adapterAddSkill.notifyDataSetChanged();
break;
case R.id.saveEmployee_info:
addEmployToDatabase();
addDepartmentToDatabase();
addSkillToDatabase();
}
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
int id = item.getItemId();
if (id == android.R.id.home) {
finish();
}
return super.onOptionsItemSelected(item);
}
private void addEmployToDatabase() {
String employeeId = employeeIdEditText.getText().toString();
String name = nameEditText.getText().toString();
String lastName = lastNameEditText.getText().toString();
String salary = salaryEditText.getText().toString();
MyQuery.addEmployee(new Employ(employeeId, name, lastName, salary));
}
private void addSkillToDatabase() {
String employeeId = employeeIdEditText.getText().toString();
String skill = skillEditText.getText().toString();
MyQuery.addSkill(new Skill(employeeId, skill));
for (int i = 0; i < skillsList.size(); i++) {
MyQuery.addSkill(new Skill(employeeIdEditText.getText().toString()
, skillsList.get(i)));
}
}
private void addDepartmentToDatabase() {
String department = departmentEditText.getText().toString();
String employeeId = employeeIdEditText.getText().toString();
MyQuery.addDepartment(new Department(employeeId, department));
for (int i = 0; i < departmentsList.size(); i++) {
MyQuery.addDepartment(new Department(employeeIdEditText.getText().toString(),
departmentsList.get(i)));
}
}
private void showAllEmployees() {
List<Employ> employs = MyQuery.getAllEmployees();
for (int i = 0; i < employs.size(); i++) {
Log.i(".......Employees", employs.get(i).toString());
}
}
private void showAllSkills() {
List<Skill> skills = MyQuery.getAllSkills();
for (int i = 0; i < skills.size(); i++) {
Log.i("......Skills", skills.get(i).toString());
}
}
private void showAllDepartments() {
List<Department> departments = MyQuery.getAllDepartments();
for (int i = 0; i < departments.size(); i++) {
Log.i(".........Departments", departments.get(i).toString());
}
}
}
Ответы (1 шт):
public class AdapterAddSkill extends RecyclerView.Adapter<AdapterAddSkill.MyViewHolderAddEmployee> {
private ArrayList<String> skillsList;
public AdapterAddSkill(ArrayList<String> skillsList) {
this.skillsList = skillsList;
}
@NonNull
@Override
public MyViewHolderAddEmployee onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_skill, parent, false);
MyViewHolderAddEmployee vh = new MyViewHolderAddEmployee(view, new MyCustomEditTextListener());
return vh;
}
@Override
public void onBindViewHolder(@NonNull final MyViewHolderAddEmployee holder, final int position) {
holder.myCustomEditTextListener.updatePosition(position);
holder.skillEditText.setText(skillsList.get(position));
holder.closeCard.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
skillsList.remove(position);
notifyItemRemoved(position);
}
});
}
@Override
public int getItemCount() {
return skillsList.size();
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getItemViewType(int position) {
return position;
}
public static class MyViewHolderAddEmployee extends RecyclerView.ViewHolder {
private ImageButton closeCard;
private EditText skillEditText;
private MyCustomEditTextListener myCustomEditTextListener;
public MyViewHolderAddEmployee(@NonNull View itemView, MyCustomEditTextListener myCustomEditTextListener) {
super(itemView);
closeCard = itemView.findViewById(R.id.deleteSkillCard);
skillEditText = itemView.findViewById(R.id.skillText);
skillEditText.addTextChangedListener(myCustomEditTextListener);
this.myCustomEditTextListener = myCustomEditTextListener;
}
}
private class MyCustomEditTextListener implements TextWatcher {
private int position;
public void updatePosition(int position) {
this.position = position;
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
skillsList.set(position, s.toString());
}
@Override
public void afterTextChanged(Editable s) {
}
}
}
