2015-11-02 3 views
1

Я пытаюсь создать listView с 2 editText в каждой строке, которые используют интерфейс TextWatcher для распознавания, если мы изменим текущий текст на editText . Моя проблема в том, что мой адаптер очень сильно отстает и медленный. как я могу справиться с этой проблемой? вот мой адаптер:Как добавить editText в listView с onTextChange?

public class AccountListInfoAdapter2 extends BaseAdapter { 

    private Activity mContext; 
    private ArrayList<ModelClass> accounts; 
    private DisplayImageOptions options; 
    private LayoutInflater inflater; 
    private prevClass mainActivityFragment; 
    private ViewHolder holder; 

    public AccountListInfoAdapter2(Activity activity, ArrayList<ModelClass> mAccountListData, prevClass mainActivityFragment) { 
     this.mContext = activity; 
     this.accounts = mAccountListData; 
     this.mainActivityFragment = mainActivityFragment; 
     inflater = LayoutInflater.from(mContext); 

    } 

    @Override 
    public int getCount() { 
     if (accounts == null) { 
      return 0; 
     } else 
      return accounts.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return null; 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     View view = convertView; 

       view = inflater.inflate(R.layout.account_info_row, parent, false); 
       holder = new ViewHolder(); 
       assert view != null; 
       setViews(view); 
       view.setTag(holder); 
       holder.emailAddress.setText(accounts.get(position).getEmail()); 
       holder.fullName.setText(accounts.get(position).getFullName()); 

      holder.fullName.setId(position); 
      holder.emailAddress.setId(position); 


      //Check if full name has been changed 
      holder.fullName.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) { 
        if (s.length() != count) { 
         if (!accounts.get(position).getFullName().equals(s.toString())) { 
          accounts.get(position).setFullName(s.toString()); 
         } 
        } 
       } 

       @Override 
       public void afterTextChanged(Editable s) { 
        if (!accounts.get(position).getFullName().equals(s.toString())) { 
         accounts.get(position).setFullName(s.toString()); 
        } 
       } 
      }); 


      //Check if email name has been changed 
      holder.emailAddress.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) { 
        if(s.length() != count) { 
         if (!accounts.get(position).getEmail().equals(s.toString())){ 
          accounts.get(position).getEmail(s.toString()); 
         } 
        } 
       } 
       @Override 
       public void afterTextChanged(Editable s) { 
        if (!accounts.get(position).getEmail().equals(s.toString())) { 
         accounts.get(position).getEmail(s.toString()); 
        } 
       } 
      }); 

     return view; 
    } 


    public static class ViewHolder { 
     TextView emailAddress; 
     EditText fullName; 
    } 


    public void setViews(View view){ 
     holder.emailAddress = (EditText) view.findViewById(R.id.accountInfoProfileEmailAddress); 
     holder.fullName = (EditText) view.findViewById(R.id.accountInfoFullName); 
    } 


} 
+0

Вы не используете много видов в своем адаптере: см. Параметр 'convertView' – pskink

+0

Я не знаю, как это сделать правильно – Anna

+0

, затем прочитайте о повторном использовании вида в адаптерах [здесь] (https: //blog.xamarin .com/create-very-performant-smooth-scrolling-android-listviews /), например, или [здесь] (http://android-decoded.blogspot.com/2011/12/so-what-exactly-is- convertview.html) – pskink

ответ

0
holder.fullName.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) { 
       if (s.length() != count) 
       { 

        if (!accounts.get(position).getFullName().equals(s.toString())) { 
         //accounts.get(position).setFullName(s.toString()); 
         ((MainActivity)context).changeListViewItem(position , s.toString); 
        } 
       } 
      } 

      @Override 
      public void afterTextChanged(Editable s) { 
       if (!accounts.get(position).getFullName().equals(s.toString())) { 
        //accounts.get(position).setFullName(s.toString()); 
        ((MainActivity)context).changeListViewItem(position , s.toString); 
       } 
      } 
     }); 

Добавьте эту функцию на основной деятельности

public void changeListViewItem(int position , String text) 
{ 
    Log.e("" , ""+position); 
    Log.e("" , ""+text); 
    refreshAdapter(); 
} 
+0

Что такое метод refreshAdapter? – Anna

+0

refreshAdapter() - это ваш метод, в котором вы можете настроить свой адаптер с позицией и текстом –

0

1. addTextChangedListener может добавить повторение.

U может пытаться добавить логин в onTextChanged.

Посмотрите, сколько раз он регистрируется, когда у типа char.

Когда вы используете addTextChangedListener, добавьте tag.

2.U следует попытаться использовать ViewHolder, чтобы помочь u.

Смежные вопросы