2016-01-20 5 views
0

Возможно, есть простое решение моей проблемы, но я не могу ее найти. У меня есть ListView со списком пользователей. Каждая строка имеет EditText, чтобы ввести имя пользователя. Я хочу установить текст подсказки для каждого пользователя, например: «user1, user2, user3 и т. Д.», Который используется как имя по умолчанию. Пользователь может щелкнуть на EditText и изменить это имя, поэтому текст подсказки исчезает, и пользователь может ввести свое имя или оставить это имя по умолчанию, если захочет.Условный наборHint/setText EditText Android

Когда ListView слишком длинный, у меня проблема с обработкой вида, которая дублирует имена. Я решил это, используя setOnFocusChangeListener для EditText и сохраняя имя для каждой строки, и он работает нормально, но мне понравилось, когда у меня есть длинный список, сохраните текст подсказки или текст, введенный пользователем для каждый EditText при прокрутке списка.

Я не знаю, как изменить адаптер, чтобы задать имя/подсказку для каждого EditText.

Любая идея?

Большое спасибо.

ответ

0

Создайте один список в вашей деятельности

List<String> yourlist = new ArrayList(); 
yourlist.add("user1"); 
yourlist.add("user2"); 
yourlist.add("user3");.... 

пройти этот список к адаптеру затем адаптер,

holder.youredittext.setHint(yourlist.get(position)); 

если ваше мимолетное количество элементов адаптера затем создать один класс модели затем перейти к адаптеру ,

+0

Если я использую holder.youredittext.setHint (yourlist.get (position)), он будет всегда выглядеть как текст подсказки при прокрутке, даже если текст EditText был отредактирован. – jgonzal

0

У меня есть адаптер, как это:

public View getView(final int position, View convertView, ViewGroup parent) 
    { 
     View item = convertView; 

     if(item == null) 
     { 
      LayoutInflater inflater = context.getLayoutInflater(); 
      item = inflater.inflate(R.layout.setup_jugador, null); 

      holder = new ViewHolder(); 
      holder.nombre = (EditText) item.findViewById(R.id.nombre); 

      // Establecemos el tag 
      item.setTag(holder); 
     }    
     else 
     { 
      holder = (ViewHolder)item.getTag(); 
     } 

     holder.nombre.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
      @Override 
      public void onFocusChange(View v, boolean hasFocus) { 
       if(!hasFocus){ 
        EditText et = (EditText) v.findViewById(R.id.nombre); 
        // Here I store the name 
        jugadores.get(position).setNombre(et.getText().toString()); 
       } 
      } 
     }); 

     // Update EditText 
     holder.nombre.setText(jugadores.get(position).getNombre()); 
     // Another option is 
     holder.nombre.setHint(jugadores.get(position).getNombre()); 

     return(item); 
} 

Игроки Команды список, который хранит имена. Первоначально у него есть user1, user2 и т. Д. Я мог бы установитьHont, когда Item == null, но мне нужно обновить текст в конце адаптера, а при прокрутке, утилита просмотра изменяет элементы, которые невидимы.

Я вижу только 8 элементов, а при прокрутке, если я меняю первый элемент, номер позиции 9 также изменяется. Если я использую setText, он становится черным, и если я использую setHint, первый элемент станет серым.

Я не могу поместить значение подсказки в макет, потому что я хотел бы добавить номер строки к имени. Я попытался использовать логическое значение в классе, используемом в качестве модели в адаптере, чтобы показать, что имя было изменено, проверьте это значение, используя индекс позиции в списке, и используйте setText или setHint в соответствии с этим, но не работает.

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