2013-12-13 3 views
0

Я новичок в разработке Android. У меня есть EditText, a Button и ListView. Когда я нажимаю кнопку, я хочу, чтобы значение строки добавлялось к ListView. У меня это отлично работает.ListView не обновляется при нажатии кнопки при скрытии клавиатуры

Однако, если я сделаю это в следующем порядке, я получаю странные результаты с пользовательским интерфейсом. Если я наберу текст, скройте клавиатуру, щелкнув по телефону, затем нажмите кнопку, ListView не будет обновлен новым элементом. Элемент добавлен в источник данных (List<String>), потому что, если я снова добавлю новый элемент, не скрывая клавиатуру, элемент, который я ввел в предыдущее время, появляется вместе с новейшим.

Это мой код при нажатии кнопки.

public void AddName(View view) { 
    EditText editText = (EditText) findViewById(R.id.txtAddName); 
    list.add(editText.getText().toString()); 
    editText.setText(""); 
    hideSoftKeyboard(MainActivity.this, view); 
} 
//This takes focus away from the EditText and hides the keyboard. 
public static void hideSoftKeyboard (Activity activity, View view) { 
    InputMethodManager imm = (InputMethodManager)activity.getSystemService(Context.INPUT_METHOD_SERVICE); 
    imm.hideSoftInputFromWindow(view.getApplicationWindowToken(), 0); 
} 

Здесь я заполняю ListView. Примечание GetList() просто возвращает list со значениями по умолчанию в нем.

public class MainActivity extends Activity { 

private List<String> list = new ArrayList<String>(); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    ListView lv = (ListView) findViewById(R.id.lvNames); 
    final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, GetList()); 
    lv.setAdapter(adapter); 
    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, final View view, int position, long id) { 
      final String item = (String) parent.getItemAtPosition(position); 
      view.animate().setDuration(2000).alpha(0).withEndAction(new Runnable() { 
       @Override 
       public void run() { 
        list.remove(item); 
        adapter.notifyDataSetChanged(); 
        view.setAlpha(1); 
       } 
      }); 
     } 
    }); 
} 
+0

сообщений адаптера и код при обновлении вашего ListView. – JJ86

ответ

2

Вы пробовали добавить адаптер.notifyDataSetChanged() в конец метода AddName?

Если все еще не работает, попробуйте заменить list.add с adapter.add

+0

Чтобы сделать это, мне нужно объявить «адаптер» на уровне класса, а не в 'onCreate'? –

+0

Да, вы должны. – Gooziec

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