0

如何在android中重新填充ListView

    listview = (ListView) findViewById(R.id.listView1);
    listview.setAdapter(new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, Names));

    final String[] TempArray = new String[Names.length];

    editText = (EditText) findViewById(R.id.editText1);
    editText.addTextChangedListener(new TextWatcher()
    {

        public void onTextChanged(CharSequence s, int start, int before,
                int count)
        {
            // TODO Auto-generated method 
        }

        public void beforeTextChanged(CharSequence s, int start, int count,
                int after)
        {
            // TODO Auto-generated method stub
        }

        public void afterTextChanged(Editable s)
        {
            // TODO Auto-generated method stub

        }
    });

那是我的示例代码。我想在 public void onTextChanged(CharSequence s, int start, int int count)函数上重新填充列表视图。在 onTextChanged 函数上,我想用新的字符串数组填充列表视图。我怎样才能做到这一点???

4

5 回答 5

0

您需要的只是将notifyDataSetChanged();方法放入您的onTextChanged方法中。

喜欢 :

editText.addTextChangedListener(new TextWatcher()
{
    public void onTextChanged(CharSequence s, int start, int before, int count)
    {
        // TODO Auto-generated method 
        notifyDataSetChanged();
    }

    public void beforeTextChanged(CharSequence s, int start, int count, int after)
    {
        // TODO Auto-generated method stub
    }

    public void afterTextChanged(Editable s)
    {
        // TODO Auto-generated method stub
    }
});

希望这有助于..享受..

于 2012-10-04T09:01:59.917 回答
0

看来您正在用“名称”值填充适配器,您可以做的是 onTextChanged 从“名称”中清除旧数据并添加新数据并设置适配器。

于 2012-10-04T08:41:49.707 回答
0

首先,您需要将适配器放入变量中:

ArrayAdapter mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, Names);
listview.setAdapter(mAdapter);

然后,当您需要重新填写您的列表时(例如,当“名称”更改时)只需调用

mAdapter.notifyDataSetChanged();
于 2012-10-04T08:42:28.710 回答
0

您可以使用下面的代码重新创建列表适配器:

editText.addTextChangedListener(new TextWatcher()
{

    public void onTextChanged(CharSequence s, int start, int before,
            int count)
    {
        // TODO Auto-generated method 
        Names = new ArrayList<~>();
        Names.add('your object');
        listview.setAdapter(new ArrayAdapter<String>(this,
                             android.R.layout.simple_list_item_1, Names));
    }

    public void beforeTextChanged(CharSequence s, int start, int count,
            int after)
    {
        // TODO Auto-generated method stub
    }

    public void afterTextChanged(Editable s)
    {
        // TODO Auto-generated method stub

    }
});

如果您只想将新数据添加到您的“名称”arrayList,您可以使用以下代码:

 editText.addTextChangedListener(new TextWatcher()
{

    public void onTextChanged(CharSequence s, int start, int before,
            int count)
    {
        // TODO Auto-generated method 
        Names.add('your object');
        listview.getAdapter().notifyDataSetChanged();
    }

    public void beforeTextChanged(CharSequence s, int start, int count,
            int after)
    {
        // TODO Auto-generated method stub
    }

    public void afterTextChanged(Editable s)
    {
        // TODO Auto-generated method stub

    }
});
于 2016-04-27T12:12:52.087 回答
0

您不能在任何 TextWatcher 方法调用中调用 notifyDataSetChanged(),这将引发RecyclerView notifyDatasetChange() 非法状态异常

我在 RecyclerView 列表中实现自动添加新行的方法是实现 OnFocusChangeListener 接口,该接口将在 editText 获得用户关注后自动添加,并且还能够避免上述错误。

editText.setOnFocusChangeListener(new View.OnFocusChangeListener {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if (hasFocus)
                // ADD NEW ITEM INTO LIST
                notifyDataSetChanged();
        }
    })
于 2016-04-27T11:52:55.797 回答