Я новичок в разработке 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);
}
});
}
});
}
сообщений адаптера и код при обновлении вашего ListView. – JJ86