In my activity there's a RecyclerView and a button to add items to the RecyclerView. Each item has two EditTexts.
Here's a Screenshot
When i scroll down and up, the EditTexts get empty. and sometimes the value entered in the EditText changes it's position! How can i solve this problem?
Here are the codes:
Adapter :
public class VoltageAdapter extends RecyclerView.Adapter<VoltageAdapter.DataViewHolder> {
private List<Voltage> datas = new ArrayList<>();
public List<Voltage> getDatas() {
return datas;
}
@Override
public DataViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
View view = layoutInflater.inflate(R.layout.item_voltage, parent, false);
return new DataViewHolder(view);
}
@Override
public void onBindViewHolder(DataViewHolder holder, int position) {
holder.bindData(datas.get(position));
}
@Override
public int getItemCount() {
return datas.size();
}
public static class DataViewHolder extends RecyclerView.ViewHolder {
private EditText vOnEditText;
private EditText vOffEditText;
public DataViewHolder(View itemView) {
super(itemView);
vOnEditText = itemView.findViewById(R.id.et_ItemVoltage_Von);
vOffEditText = itemView.findViewById(R.id.et_ItemVoltage_Voff);
}
public void bindData(final Voltage voltage) {
vOnEditText.setText(voltage.getVon());
vOffEditText.setText(voltage.getVoff());
vOnEditText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
voltage.setVon(s.toString());
}
@Override
public void afterTextChanged(Editable s) {
vOnEditText.setSelection(vOnEditText.getText().length());
}
});
vOffEditText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
voltage.setVoff(s.toString());
}
@Override
public void afterTextChanged(Editable s) {
}
});
}
}
public void addData(Voltage voltage) {
datas.add(voltage);
notifyItemInserted(datas.size() - 1);
}
}
Activity Class :
public class VoltageActivity extends AppCompatActivity {
private VoltageAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_voltage);
setupViews();
}
private void setupViews() {
Button calcucalteButton = findViewById(R.id.btn_voltage_calculate);
Button addDataButton = findViewById(R.id.btn_voltage_addData);
adapter = new VoltageAdapter();
RecyclerView recyclerView = findViewById(R.id.rv_voltage_voltages);
recyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
recyclerView.setAdapter(adapter);
addDataButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Voltage voltage = new Voltage();
adapter.addData(voltage);
}
});
calcucalteButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
List<Voltage> datas = adapter.getDatas();
float DeltaVoltages[] = new float[datas.size()];
for (int i = 0; i < datas.size(); i++) {
Voltage voltage = datas.get(i);
float res = Float.parseFloat(voltage.getVon()) - Float.parseFloat(voltage.getVoff());
DeltaVoltages[i] = res;
}
float minDelta = DeltaVoltages[0];
for (int i = 0; i < DeltaVoltages.length; i++) {
if (DeltaVoltages[i] < minDelta) minDelta = DeltaVoltages[i];
}
Log.i("VoltageActivity", Arrays.toString(DeltaVoltages));
Log.i("Min is ", String.valueOf(minDelta));
Toast.makeText(VoltageActivity.this, "Min Delta V is " + String.valueOf(minDelta), Toast.LENGTH_SHORT).show();
}
});
}
}