2015-10-11 4 views
0

Привет, я пытаюсь сделать просмотр списка с текстом редактирования, где пользователь может ввести числа, которые он хочет, но мой код продолжает прыгать между блоками редактирования после того, как я добавляю первый символ, есть способ остановить это ? Я попытался удалить фокус и удалить addTextWatcher. Однако, когда я удаляю addtextwatcher, текст текста не записывается. Пожалуйста, дайте мне знать, если вам нужна дополнительная информация, так как я новичок в этой жизни Android. вот мой код для адаптера: public CreateWKOAdapter (контекст контекста, элементы ArrayList, ListView listview) { inflater = LayoutInflater.from (контекст); this.mContext = context; this.items = items; this.listview = listview; }Редактирование текстов не работает должным образом android

@Override 
public int getCount() 
{ 
    return items.size(); 
} 

@Override 
public CreateWKOItem getItem(int position) 
{ 
    return items.get(position); 
} 

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

@Override 
public View getView(int position, View convertView, ViewGroup parent) 
{ 
    ViewHolder holder = null; 
    if (convertView == null) 
    { 
     holder = new ViewHolder(); 

     convertView = inflater.inflate(R.layout.create_wko_layout_item, null); 
     holder.name_text_view = (TextView) convertView.findViewById(R.id.text_name); 
     holder.header = convertView.findViewById(R.id.relativeLayout1); 
     holder.input = convertView.findViewById(R.id.oclick_layout); 
     holder.image_view = (ImageView) convertView.findViewById(R.id.foto_createwko); 
     holder.sets_edit_text = (CustomEditText) convertView.findViewById(R.id.sets_edit_text); 
     holder.reps_edit_text = (CustomEditText) convertView.findViewById(R.id.rep_edit_text); 
     holder.checkbox = (ImageView) convertView.findViewById(R.id.image_chk); 

     holder.header.setTag(holder.input); 

     convertView.setTag(holder); 
    } 
    else 
    { 
     holder = (ViewHolder) convertView.getTag(); 

    } 


    if (visibleindex == position) 
    { 
     holder.input.setVisibility(View.VISIBLE); 
     if(holder.sets_edit_text != null) 
     { 
      final EditText clone = holder.sets_edit_text; 
      holder.sets_edit_text.postDelayed(new Runnable() 
      { 
       @Override 
       public void run() 
       { 
        clone.requestFocus(); 
        Log.i("su", "Request focus"); 
       } 
      }, 300); 
     } 
    } 
    else 
    { 
     holder.input.setVisibility(View.GONE); 
    } 

    CreateWKOItem item = getItem(position); 

    if(item.isShouldShowCheckBox()) 
    { 
     holder.checkbox.setVisibility(View.VISIBLE); 
    } 
    else 
    { 
     holder.checkbox.setVisibility(View.GONE); 
    } 
    String image_drawable_str = item.getName().toLowerCase().replace(" ", "_"); 
    Drawable drawable = getImageFromDrawableByString(image_drawable_str); 
    if (drawable != null) 
    { 
     holder.image_view.setImageDrawable(drawable); 
    } 
    else 
    { 
     holder.image_view.setImageResource(R.drawable.bg_count); 
    } 

    holder.sets_edit_text.removeTextWatcher(); 
    holder.reps_edit_text.removeTextWatcher(); 

    holder.name_text_view.setText(item.getName()); 
    holder.sets_edit_text.setHint("" + item.getSets()); 
    holder.reps_edit_text.setHint("" + item.getReps()); 

    holder.header.setTag(holder.input); 
    holder.header.setTag(R.id.tag_id, position); 
    holder.header.setTag(R.id.view_id, holder.reps_edit_text); 

    holder.sets_edit_text.setTag(item); 
    holder.reps_edit_text.setTag(item); 

    holder.sets_edit_text.addTextWatcher(); 
    holder.reps_edit_text.addTextWatcher(); 

    holder.header.setOnClickListener(new View.OnClickListener() 
    { 
     @Override 
     public void onClick(View v) 
     { 
      final EditText editText = (EditText) v.getTag(R.id.view_id); 

      final int a = (int) v.getTag(R.id.tag_id); 
      visibleindex = a; 

      View input = (View) v.getTag(); 
      if (input.getVisibility() == View.VISIBLE) 
      { 
       input.setVisibility(View.GONE); 
       visibleindex = -1; 
      } 
      else 
      { 
       //input.setVisibility(View.VISIBLE); 

      } 
      notifyDataSetChanged(); 

     } 
    }); 

    holder.sets_edit_text.setiOnTextChanged(new CustomEditText.IOnTextChanged() 
    { 
     @Override 
     public void onTextChanged(View v, String newText) 
     { 
      CreateWKOItem it = (CreateWKOItem) v.getTag(); 
      int value = 0; 
      try 
      { 
       String str = newText.toString(); 
       Log.i("su", "Sets text change to: " + str); 
       if (str.length() > 0) 
        value = Integer.parseInt(str); 
      } 
      catch (Exception ex) 
      { 
       ex.printStackTrace(); 
      } 
      if (it != null) 
      { 
       it.setSets(value); 
       Log.i("su", "Current item set sets to: " + value); 
      } 
      notifyDataSetChanged(); 
     } 
    }); 

    holder.reps_edit_text.setiOnTextChanged(new CustomEditText.IOnTextChanged() 
    { 
     @Override 
     public void onTextChanged(View v, String newText) 
     { 
      CreateWKOItem it = (CreateWKOItem) v.getTag(); 
      int value = 0; 
      try 
      { 
       String str = newText.toString(); 
       Log.i("su", "Reps text change to: " + str); 
       if (str.length() > 0) 
        value = Integer.parseInt(str); 
      } 
      catch (Exception ex) 
      { 
       ex.printStackTrace(); 
      } 
      if (it != null) 
      { 
       it.setReps(value); 
       Log.i("su", "Current item set reps to: " + value); 
      } 
      notifyDataSetChanged(); 
     } 
    }); 
    return convertView; 

} 

Благодаря

ответ

0

Что мне нужно было сделать, это прокомментировать notifyDataSetChanged(); но только на множестве повторений.

0

простое решение: сохранить ваш TextBox слушателя, и оставить скобки пустыми. Может, это Android? Вы можете посмотреть на ошибку.

+0

Что вы имеете в виду, сохраняя свой прослушиватель текстовых полей? Спасибо – pudm

+0

'addTextWatcher()'. Просто сделайте метод пустым между скобками. –

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