Ich habe einen Listeneintrag EditTextdarin, ich weiß nicht, wie viele Einträge es geben wird. Ich habe ein Problem, wenn ich Text EditTexteingebe und dann nach unten scrolle RecyclerView. Nachdem ich wieder nach oben gescrollt habe, befindet sich in meinem ersten Text kein Text EditText.
Ich frage mich , was und wo soll ich Code schreiben , so dass während der Benutzer die Eingabe oder Eingabe beendet ist (ich dachte , das zu tun, mit ein TextWatcher) in EditTextden Text in einer Datei gespeichert wird (ich es in eine sparen werde. txt-Datei im externen Speicher)
Soll ich das in der onCreateMethode der Aktivität oder in der Adapterklasse oder anderswo tun ?
Hier ist ein Code
Hauptaktivitätscode
public class MainActivity extends Activity {
RecyclerView mRecyclerView;
MyAdapter mAdapter;
String[] mDataSet= new String[20];
@Override
protected void onCreate(Bundle savedInstanceState) {
// generating text for editText Views
for (int i = 0; i<=19; i++){
mDataSet[i]= "EditText n: "+i;
}
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);
mAdapter = new MyAdapter(mDataSet);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
mRecyclerView.setAdapter(mAdapter);
mRecyclerView.setHasFixedSize(true);
}
Mein Adaptercode
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private String[] mDataset;
public static class ViewHolder extends RecyclerView.ViewHolder {
// each data item is just a string in this case
public EditText mEditText;
public ViewHolder(View v) {
super(v);
mEditText = (EditText) v.findViewById(R.id.list_item_edittext);
}
}
public MyAdapter(String[] myDataset) {
mDataset = myDataset;
}
@Override
public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
int viewType) {
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.list_item, parent, false);
ViewHolder vh = new ViewHolder(v);
return vh;
}
@Override
public void onBindViewHolder(ViewHolder holder, final int position) {
holder.mEditText.setText(mDataset[position]);
//without this addtextChangedListener my code works fine ovbiusly
// not saving the content of the edit Text when scrolled
// If i add this code then when i scroll all textView that go of screen
// and than come back in have messed up content
holder.mEditText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start,
int before, int count) {
//setting data to array, when changed
// this is a semplified example in the actual app i save the text
// in a .txt in the external storage
mDataset[position] = s.toString();
}
@Override
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
}
@Override
public int getItemCount() {
return mDataset.length;
}
Ohne diesen "addtextChangedListener" funktioniert mein Code offensichtlich einwandfrei, ohne den Inhalt des Bearbeitungstextes beim Scrollen zu speichern. Wenn ich diesen Code hinzufüge, haben beim Scrollen alle editText-Ansichten, die vom Bildschirm verschwinden und dann wieder eingehen, den Inhalt durcheinander gebracht.
