当隐藏键盘时,ListView不会在按钮单击时更新

时间:2013-12-13 12:38:23

标签: android android-listview android-softkeyboard

我是Android开发的新手。我有一个EditText,一个Button和一个ListView。当我单击按钮时,我希望将字符串值添加到ListView。我的工作很棒。

但是,如果按以下顺序执行此操作,我会在UI中获得奇怪的结果。如果我键入了一些文本,请单击手机上的隐藏键盘,然后单击按钮,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);
                }
            });
        }
    });
}

1 个答案:

答案 0 :(得分:2)

您是否尝试将adapter.notifyDataSetChanged()添加到AddName方法的末尾?

如果仍然无效,请尝试将list.add替换为adapter.add