दिलचस्प पोस्ट
"Java.lang.OutOfMemoryError: PermGen space" त्रुटि से निपटना खोज आदेश के साथ regex का उपयोग कैसे करें? इकाई फ़्रेमवर्क कोड पहले। प्राथमिक कुंजी ढूंढें पूर्ण प्रकार के प्रचार नियम स्काला में कई पैरामीटर सूचियों और प्रति सूची में कई मापदंडों के बीच क्या अंतर है? सी में मूल्यों को स्वैप करने का सबसे तेज़ तरीका क्या है? jQuery – एक div के साथ कर्सर का पालन करें एंड्रॉइड स्टूडियो में "प्रतीक आर को हल नहीं किया जा सकता" JSF 2 में faces-config.xml का क्या उपयोग है? आत्मा क्यूई के एकल-सदस्यीय संरचना के साथ विशेषता प्रसार का मुद्दा वीम में चयन के लिए खोजें PHP और MYSQL: JOIN कार्रवाई में अस्पष्ट स्तंभ नामों को हल करने के लिए कैसे? मैं एक कुकी क्यों सेट नहीं कर सकता और रीडायरेक्ट नहीं कर सकता? एक पंक्ति में एकाधिक अपवादों को पकड़ो (ब्लॉक को छोड़कर) contenteditable = contenteditable = असली ब्लॉक के भीतर = अभी भी IE8 में संपादन योग्य है

रीसाइक्लिंगदृश्य में संपादन सामग्री को सहेजना

मेरे पास उस सूची में EditText है, मुझे नहीं पता कि कितने आइटम होंगे। मेरे पास एक समस्या है जब मैं EditText में कुछ टेक्स्ट दर्ज करता हूं, और फिर एक RecyclerView स्क्रॉल करता हूं, जब मैंने फिर से स्क्रॉल किया है, तो मेरी पहली EditText में कोई पाठ नहीं है I

मैं सोच रहा हूँ कि क्या है, और मुझे कहां लिखना चाहिए ताकि उपयोगकर्ता टाइपिंग या टाइपिंग समाप्त कर रहा है (मैं TextWatcher साथ ऐसा करने के लिए सोच रहा था) टेक्स्ट में पाठ को एक फ़ाइल में सहेजा जाता है (मैं इसे में सेव करता हूँ बाह्य भंडारण में एक .txt फ़ाइल)

क्या मैं गतिविधि की onCreate विधि या एडेप्टर वर्ग या अन्य जगहों में ऐसा करने वाला हूं?

यहाँ कुछ कोड है

मुख्य गतिविधि कोड

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

मेरा एडाप्टर कोड

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

इस "addtextChangedListener" के बिना मेरा कोड ठीक से अप्रचलित रूप से संपादन की सामग्री को नहीं सहेजता है जब स्क्रॉल किए गए पाठ अगर मैं इस कोड को जोड़ता हूं, जब मैं सभी संपादन टेप दृश्य स्क्रॉल करता हूं, जो स्क्रीन से बाहर निकलता है और वापस आकर सामग्री से गड़बड़ कर चुका है

वेब के समाधान से एकत्रित समाधान "रीसाइक्लिंगदृश्य में संपादन सामग्री को सहेजना"

आपके समाधान के साथ बड़ी समस्या आवंटित करना और TextWatcher को onBindViewHolder में असाइन करना है जो एक महँगा ऑपरेशन है जो फास्ट स्क्रॉल के दौरान लांग का परिचय देता है और यह यह भी निर्धारित करने में हस्तक्षेप करता है कि किस स्थिति में मै एडाप्टर में अपडेट किया गया है।

OnCreateViewHolder में सभी कार्यों को बनाना एक बेहतर विकल्प है। यहां पूरा परीक्षण किया गया काम समाधान है:

 public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { private String[] mDataset; 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_edittext, parent, false); // pass MyCustomEditTextListener to viewholder in onCreateViewHolder // so that we don't have to do this expensive allocation in onBindViewHolder ViewHolder vh = new ViewHolder(v, new MyCustomEditTextListener()); return vh; } @Override public void onBindViewHolder(ViewHolder holder, final int position) { // update MyCustomEditTextListener every time we bind a new item // so that it knows what item in mDataset to update holder.myCustomEditTextListener.updatePosition(holder.getAdapterPosition()); holder.mEditText.setText(mDataset[holder.getAdapterPosition()]); } @Override public int getItemCount() { return mDataset.length; } public static class ViewHolder extends RecyclerView.ViewHolder { // each data item is just a string in this case public EditText mEditText; public MyCustomEditTextListener myCustomEditTextListener; public ViewHolder(View v, MyCustomEditTextListener myCustomEditTextListener) { super(v); this.mEditText = (EditText) v.findViewById(R.id.editText); this.myCustomEditTextListener = myCustomEditTextListener; this.mEditText.addTextChangedListener(myCustomEditTextListener); } } // we make TextWatcher to be aware of the position it currently works with // this way, once a new item is attached in onBindViewHolder, it will // update current position MyCustomEditTextListener, reference to which is kept by ViewHolder private class MyCustomEditTextListener implements TextWatcher { private int position; public void updatePosition(int position) { this.position = position; } @Override public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) { // no op } @Override public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) { mDataset[position] = charSequence.toString(); } @Override public void afterTextChanged(Editable editable) { // no op } } } 

मुझे एक ही समस्या थी, मैंने निम्नलिखित पंक्ति को जोड़ा और यह मेरी तरफ से समस्या तय की है।

 mRecyclerview.setItemViewCacheSize(mDataset.size()); 

उम्मीद है कि इस तरह से आपकी तरफ से इस समस्या का पता चलता है।

अपने एडेप्टर डेटा के आकार के साथ एक स्ट्रिंग एरे बनाएँ

उदाहरण: String[] texts = new String[dataSize];

आपके एडाप्टर के अंदर onBindViewHolder विधि पर, TextVangedListener को Textview में जोड़ें

उदाहरण: –

 @Override public void onBindViewHolder(Viewholder holder, int position) { //binding data from array holder.yourEditText.setText(texts [position]); holder.yourEditText.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { //setting data to array, when changed texts [position] = s.toString(); } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { //blank } @Override public void afterTextChanged(Editable s) { //blank } }); } 

मैं एक इंटरफ़ेस बनाऊँगा और पाठ बदलने की घटना को संभालने के लिए वर्तमान एडाप्टर स्थिति को पारित करूँगा

  public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { private String[] mDataset; 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_edittext, parent, false); ViewHolder vh = new ViewHolder(v, new ViewHolder.ITextWatcher() { @Override public void beforeTextChanged(int position, CharSequence s, int start, int count, int after) { // do something } @Override public void onTextChanged(int position, CharSequence s, int start, int before, int count) { mDataset[position] = s.toString(); } @Override public void afterTextChanged(int position, Editable s) { // do something } }); return vh; } @Override public void onBindViewHolder(ViewHolder holder, final int position) { holder.mEditText.setText(mDataset[position]); } @Override public int getItemCount() { return mDataset.length; } public static class ViewHolder extends RecyclerView.ViewHolder { public EditText mEditText; private ITextWatcher mTextWatcher; public interface ITextWatcher { // you can add/remove methods as you please, maybe you dont need this much void beforeTextChanged(int position, CharSequence s, int start, int count, int after); void onTextChanged(int position, CharSequence s, int start, int before, int count); void afterTextChanged(int position, Editable s); } public ViewHolder(View v, ITextWatcher textWatcher) { super(v); this.mEditText = (EditText) v.findViewById(R.id.editText); this.mTextWatcher = textWatcher; this.mEditText.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { mTextWatcher.beforeTextChanged(getAdapterPosition(), s, start, count, after); } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { mTextWatcher.onTextChanged(getAdapterPosition(), s, start, before, count); } @Override public void afterTextChanged(Editable s) { mTextWatcher.afterTextChanged(getAdapterPosition(), s); } }); } } } 

मैं रिसाइकिलरविव ऑब्जेक्ट से परिचित नहीं हूं, लेकिन मुझे सूचीव्यू के साथ एक ही समस्या थी। उन लोगों के लिए, मैं आम तौर पर मेरे विचारों (यह EditTexts, चेकबॉक्सेज़, रेडियोबुटन्स … के साथ काम करता है) के माध्यम से एक विज्ञापन-हॉक वर्ग का प्रतिनिधित्व करता है और उनसे अद्यतन डेटा प्राप्त करता है। मैं तब एक कंटेनर ऑब्जेक्ट्स से मिलकर एक कस्टम अर्रे एडाप्टर बनाऊं, उनसे प्रत्येक getView () कॉलबैक पर एडिटेक्सट्स को डालते हुए इन ऑब्जेक्ट्स को अद्यतित रखने के लिए एक टेक्स्टवाटर को लागू करने के लिए मूल्यों को पुनः प्राप्त करना। दोबारा, मुझे बिल्कुल याद नहीं है कि रीसाइक्लेर वीव्स कैसे कार्य करते हैं, लेकिन अगर वे एडाप्टर शामिल करते हैं, तो यह आपके लिए एक अच्छा हैक की कोशिश कर सकता है।

हाय @ मीकवीई सुनिश्चित करें कि आप नीचे दिए गए तरीकों में पाठ को बदले गए श्रोता को जोड़ते हुए जोड़ते हैं, पर इसे जोड़ने के बजाय onBindViewHolder ()।

 public ViewHolder(View v) { super(v); yourEditText.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { //setting data to array, when changed texts [position] = s.toString(); } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void afterTextChanged(Editable s) { } }); }