2013-03-15 17 views
5

Ich habe den folgenden benutzerdefinierten Basisadapter. Ich habe eine Listenansicht mit einem Editiertext für jedes Element. Ich möchte diese Daten speichern, sobald der Benutzer den Editiertext verlässt, aber was jetzt passiert ist, dass jedes Mal, wenn der Benutzer 1 Zeichen eingibt, der SetOnFocusChangeListener auslöst. Ich weiß wirklich nicht, warum das passiert.setOnFocusChangeListener - Trigger nach jedem Zeichen

Meine eigene Basis Adapterklasse

public class ChecklistBaseAdapter extends BaseAdapter { 
private static ArrayList<Checklist> searchArrayList; 
Context currentcontext; 
DatabaseHandler db; 
private LayoutInflater mInflater; 

public ChecklistBaseAdapter(Context context, ArrayList<Checklist> results) { 

    searchArrayList = results; 
    mInflater = LayoutInflater.from(context); 
    currentcontext = context; 
    db = new DatabaseHandler(currentcontext); 
} 

public int getCount() { 

    return searchArrayList.size(); 
} 

public void remove(int position) { 

    searchArrayList.remove(position); 
    notifyDataSetChanged(); 
} 

public void removeAll() { 

    searchArrayList.clear(); 
    notifyDataSetChanged(); 
} 

public void add(Checklist checklist) { 
    searchArrayList.add(checklist); 

    notifyDataSetChanged(); 
} 

public void notifyChange() { 
    notifyDataSetChanged(); 
} 

public Object getItem(int position) { 

    return searchArrayList.get(position); 

} 

public long getItemId(int position) { 

    return position; 
} 

public View getView(int position, View convertView, ViewGroup parent) { 

    final ViewHolder holder; 
    if (convertView == null) { 
     convertView = mInflater.inflate(R.layout.checklistitem, null); 
     holder = new ViewHolder(); 

     holder.cbStatus = (CheckBox) convertView 
       .findViewById(R.id.checkbox); 
     holder.etName = (EditText) convertView.findViewById(R.id.editname); 

     convertView.setTag(holder); 
    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 
    Checklist checklist = (Checklist) getItem(position); 

    holder.etName.setText(checklist.getName()); 

    holder.etName.setId(position); 
    if (searchArrayList.get(position).getStatus().equals("F")) { 
     holder.cbStatus.setChecked(false); 
    } else { 
     holder.cbStatus.setChecked(true); 
    } 

    holder.etName.setOnEditorActionListener(new OnEditorActionListener() { 

     @Override 
     public boolean onEditorAction(TextView v, int actionId, 
       KeyEvent event) { 

      if (actionId == EditorInfo.IME_ACTION_DONE) { 
       int myint = v.getId(); 
       searchArrayList.get(myint)._name = v.getText().toString(); 
       return true; 

      } 
      return false; 
     } 
    }); 
    holder.etName 
      .setOnFocusChangeListener(new OnFocusChangeListener() { 
       @Override 
       public void onFocusChange(View v, boolean hasFocus) { 
        String input; 
        EditText editText; 

        if (!hasFocus) { 
         Log.e("test", "test123"); 
         int myint = v.getId(); 
         editText = (EditText) v; 
         input = editText.getText().toString(); 
         searchArrayList.get(myint)._name = input; 

        } 
       } 
      }); 

    holder.cbStatus 
      .setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
       @Override 
       public void onCheckedChanged(CompoundButton buttonView, 
         boolean isChecked) { 
        String name = holder.etName.getText().toString().trim(); 
        if (isChecked) { 
         for (int x = 0; x < searchArrayList.size(); x++) { 
          Checklist checklist = new Checklist(); 
          checklist = searchArrayList.get(x); 
          if (name.equals(checklist.getName())) { 
           checklist.setStatus("T"); 
           db.updateCheckList(checklist); 
           searchArrayList.set(x, checklist); 
          } 
         } 
        } else { 
         for (int x = 0; x < searchArrayList.size(); x++) { 
          Checklist checklist = new Checklist(); 
          checklist = searchArrayList.get(x); 
          if (name.equals(checklist.getName())) { 
           checklist.setStatus("F"); 
           searchArrayList.set(x, checklist); 
           db.updateCheckList(checklist); 
          } 
         } 
        } 
       } 
      }); 

    return convertView; 
} 

static class ViewHolder { 

    CheckBox cbStatus; 
    EditText etName; 

} 

}

Antwort

0

Versuchen Sie, die addTextChangedListener() Methode verwendet

holder.etName.addTextChangedListener(new TextWatcher() { 

      @Override 
      public void onTextChanged(CharSequence s, int start, 
        int before, int count) { 

      } 

      @Override 
      public void beforeTextChanged(CharSequence s, int start, 
        int count, int after) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void afterTextChanged(Editable s) { 
       // TODO Auto-generated method stub 
        String input; 
       EditText editText; 

        Log.e("test", "test123"); 
        int myint = v.getId(); 
        editText = (EditText)v; 
        input = editText.getText().toString(); 
        searchArrayList.get(myint)._name = input; 

     }); 

hoffe, es wird Ihnen helfen.

Verwandte Themen