Enregistrement EditText contenu dans RecyclerView

J'ai élément de la liste avec EditText en elle, je ne sais pas combien d'articles il y en aura.
J'ai un problème quand je tape du texte dans EditText, puis faites défiler vers le bas d'un RecyclerView, après que j'ai faites défiler jusqu'à nouveau il n'y a pas de texte dans mon premier EditText.

Je me demande de quoi, et où dois-je écrire le code de sorte que, si l'utilisateur tape ou terminé (je pensais le faire avec un TextWatcher) dans le EditText le texte est enregistré dans un fichier (je vais l'enregistrer dans un .fichier txt dans le stockage externe)

Suis-je censé faire dans le onCreate méthode de l'activité ou dans la classe d'adaptateur ou d'ailleurs?

Voici un code

L'Activité principale de code

 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);
    }

Mon code d'adaptateur

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;
}

sans cette "addtextChangedListener" mon code fonctionne très bien obviusly pas enregistrer le contenu de l'édition du Texte lors d'un défilement. Si j'ajoute ce code, quand je défilez toutes les editText points de vue qui sortent de l'écran et de revenir en ont foiré contenu.

  • merci de partager votre code pour la carte, mises en page, de l'activité/fragment qui héberge recyclerView.
  • Utiliser un TextWatcher pour enregistrer le texte saisi d'une représentation en mémoire de votre liste, puis enregistrez ce à SharedPreferences Activité ou un Fragment de onStop() la méthode.
  • vous pouvez en trouver un editText dans votre activité.Vous avez juste à trouver la vue de votre editText de cette position. Si vous souhaitez ce type de code que je peux vous aider.
  • publier vos onBindViewHolder
  • J'ai ajouté le code
  • J'ai ajouté le code
  • J'ai ajouté le code

InformationsquelleAutor gatteo | 2015-08-05