0

друзей.Android: обновите ListView из EditText

У меня есть модуль приложения, который реализует шаблон состояния. Идея: 1. Пользователь введите даты -> 2. изменения экрана в состояние пе: динамически раздувает ListView и просит пользователя заполнить список с некоторыми данными

Проблема заключается в том, что, когда я называю notifyDataSetChange() из метод обновления 2-й раз, просмотр EditText больше не хочет выполнять свои функции.

Это строка из logcat, которая, как я думаю, содержит ключ моей проблемы.

09-10 10: 33: 38,937 26954-26954/com.example.android.turtleinfo Д/ListView: изменение позиции доступности фокуса = 0

Вот коды для всего.

1. Мой государственный Узор Супер Класс

public abstract class ScreenState 
    { 

     public BuilderActivity activity; 



     public ScreenState(BuilderActivity activity) { 
      this.activity = activity; 
      //initializeScreen(activity); 
     } 

     public abstract void initializeScreen(Activity activity); 
     public abstract void switchState(); 
     public abstract void updateText(View view); 


     public void addTextWatcher(EditText text) { 
      text.setOnEditorActionListener(new TextView.OnEditorActionListener() { 
       @Override 
       public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
        if (actionId == EditorInfo.IME_ACTION_DONE) { 

         activity.state.updateText(v); 

         return true; 
        } 
        return false; 
       } 
      }); 
     } 


    } 

2. Реализация экрана инициализации и UpdateData методы

@Override 
    public void initializeScreen(Activity activity) { 

     ((BuilderActivity) activity).editText.setHint("Name"); 
     addTextWatcher(((BuilderActivity) activity).editText); 
     textView = (TextView)activity.getLayoutInflater().inflate(R.layout.schedule_text_style, null); 
     textView.setHeight(100); 
     screenText = "End Date: " + new SimpleDateFormat("MMMM dd, yyyy", Locale.ENGLISH).format(((BuilderActivity) activity).data.getEndDate())+"\n\n"; 

     textView.setText(screenText+"\n"); 
     ((BuilderActivity) activity).scheduleLayout.addView(textView); 

     ((BuilderActivity) activity).data.setNames(new ArrayList<String>()); 

     lv = (ListView)activity.getLayoutInflater().inflate(R.layout.listview_text_style, null); 
     listItems = new ArrayList<>(); 

     adapt = new ArrayAdapter<>(super.activity, R.layout.schedule_text_style, listItems); 
     lv.setAdapter(adapt); 
     ((BuilderActivity) activity).scheduleLayout.addView(lv); 


    } 

@Override 
public void updateText(View view) { 

    String text = activity.editText.getText().toString(); 

    if (text.length() >= 2) { 
     if (!activity.data.names.contains(text)) { 
      activity.data.addToList(text); 



      listItems.add(text); 
      adapt.notifyDataSetChanged(); 

      activity.editText.setText(""); 
      counter++; 
      activity.editText.setText(""); 

     } else { 
      Toast.makeText(activity, "same names are not allowed", 
       Toast.LENGTH_LONG).show(); 
      ((BuilderActivity) activity).editText.setText(""); 
     } 
    } 
    else 
    { 
     Toast.makeText(activity, "name should contain 2 or more symbols", 
       Toast.LENGTH_LONG).show(); 
     ((BuilderActivity) activity).editText.setText(""); 
    } 

} 

Вот как это выглядит на устройство.

1. Первая вставка нормально

enter image description here

2. И второй и дальнейшие insertionas невозможны. Кнопка ОК softkeyboard переключает первую на следующую кнопку enter image description here

3. Если я щелкаю дальше, EditText теряет фокус, ничего не происходит, но СЛЕДУЮЩИЕ Переключает на кнопку «/ п».

enter image description here

Так, пожалуйста, если кто-нибудь знает, что я делаю worng, помогите!

Заранее благодарен!

ответ

1

Ваша проблема заключается в

public void addTextWatcher(EditText text) 

функции.

Посмотрите на андроида: imeActionId и андроид: imeOptions атрибуты, а также методsetOnEditorActionListener(), все на TextView/EditText.

Вы также можете изменить текст кнопки клавиатуры, используя это.

mEditText.setImeActionLabel("Your text", KeyEvent.KEYCODE_ENTER); 
Смежные вопросы