android - कस्टम सूचीदृश्य एडेप्टर गलत पाठ संपादन




listview android-edittext (2)

यह मुद्दा इसलिए होता है क्योंकि विचार पुन: प्रयोज्य होते हैं (जो कि एंड्रॉइड एपीआई में डिज़ाइन द्वारा होता है)। तो अंततः आप एक से अधिक पाठ व्यूअर एक ही पाठ दृश्य में प्रदान कर सकते हैं। और सभी आवंटित नजर रखने वालों को निकाल दिया जाता है जब पाठ के अंदर पाठ को बदल दिया जाता है।

एक त्वरित ठीक (और गैर-इष्टतम अगर सूची में वास्तव में लंबा है, कहना है कि, 1000+ वस्तुओं का) Traweller -> TextWatcher का एक मानचित्र Traweller -> TextWatcher

फिर GetView () के अंदर आप ऐसा (छद्म कोड) कर सकते हैं:

  • इस Traweller लिए Traweller अगर नक्शा TextWatcher
  • अगर नक्शा में कोई नहीं है, तो एक नया TextWatcher बनाएं, मैप में डालें और EditText को असाइन करें
  • अन्यथा EditText को EditText से अलग करें और नक्शे से निकालें
  • एक नया TextWatcher बनाएं, मैप में डालें और EditText को असाइन करें

मेरे पास अनुकूल एडाप्टर वाले यात्रियों की सूची है जिसमें दो संपादन टेक्स्ट - edtFirstName और edtLlastName शामिल हैं I मैं चाहता हूं कि जब उपयोगकर्ता पाठ में प्रवेश करे, तब सूची में परिवर्तन को बचाया जाए, और जब अगला बटन क्लिक करें तो यह सूची दूसरी गतिविधि को भेज दें।

मेरा कोड:

public class TravellersAdapter extends BaseAdapter {

  private List<Traveler> itemsList;
  private LayoutInflater inflater;
  private Activity context;

  public TravellersAdapter(Activity context, List<Traveler> itemsList) {
    super();
    this.itemsList = itemsList;
    this.context = context;
    inflater = LayoutInflater.from(context);
  }

  public int getCount() { return itemsList.size();  }

  public Object getItem(int i) {  return itemsList.get(i);  }

  public View getView(final int position, View view, ViewGroup viewGroup) {
    if (view == null) {
      view = inflater.inflate(R.layout.traveller_item, null);
    }
    Traveler currentItem = (Traveler) getItem(position);

    EditText firstNameView = (EditText) view.findViewById(R.id.edtFirstName);
    firstNameView.addTextChangedListener(new TextWatcher() {

      public void afterTextChanged(Editable editable) {
        currentItem.setFirstName(editable.toString());
      }

    });

    return view;
  }
}

उदाहरण सूची आइटम के लिए 5 आइटम शामिल हैं I जब मैं 2-4 तत्व को ठीक से संपादित करता हूं, लेकिन जब मैं सूची में सभी तत्वों को असाइन किया गया पहला या अंतिम तत्व संपादित मूल्य संपादित करता है डबगर में मैंने देखा कि विधि के बाद afterTextChanged 5 बार position विभिन्न मूल्यों के साथ कॉल करता है। इसे कैसे जोड़ेंगे?


GetView विधि में, पैरामीटर स्थिति में नव निर्मित बालव्यू की स्थिति है, क्लिक किए गए बालव्यू की स्थिति नहीं।

सही स्थिति प्राप्त करने के लिए इसका उपयोग करें:

final int actual_position = myList.getPositionForView((View) v.getParent());

onClick(View v); किसी भी दृश्य के onClickListener का आपके मामले में, आपको उस संपादन टेक्स्ट के लिए टेस्ट चेंंकित लिस्टनर पर कार्यान्वित करना होगा।

यहाँ:

myList ListView है

v यह दृश्य है जिसे आपने क्लिक किया है, इस मामले में माता-पिता (myList) का बच्चाव्यू।





adapter