как сохранить пользовательский ввод в RecyclerView - PullRequest
0 голосов
/ 07 апреля 2020

Я добавляю «Сотрудник» в базу данных SQLite. При добавлении сотрудника в базу данных пользователь должен заполнить поля, относящиеся к сотруднику, например, имя, фамилия, зарплата и т. Д. c. У сотрудника есть несколько атрибутов, таких как «квалификация» и «отдел». Эти атрибуты могут иметь несколько сотрудников, поэтому, когда пользователь заполняет все поля атрибутами, ему предлагается добавить другое поле, например, поле «навык». чтобы добавить еще один «навык», в такое поле «навык» вы можете добавить столько, сколько хотите, и я реализовал его с помощью RecyclerView. Но проблема заключается в следующем: когда пользователь хочет добавить другое поле «навык», появляется пустой EditText, и пользователь заполняет это поле данными, но я не знаю, как сохранить эту строку, потому что когда вы нажимаете добавить навык, пустая строка передается на адаптер, затем пользователь заполняет эту строку, но как сохранить эту строку в списке, который содержит адаптер, я не могу понять

пожалуйста, смотрите GIF

Это класс адаптера

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 Ответ

0 голосов
/ 07 апреля 2020
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) {

    }
}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...