如何使用ArrayAdapter直接更改对象属性? (列表显示)

时间:2011-07-28 01:45:45

标签: android listview

我正在使用带有arrayadapter的listview ..我想知道如何使用适配器直接更改对象属性?无需删除它并读取它。有可能吗?

目前我使用..

    btnModifierNom.setOnClickListener(new OnClickListener(){            
               @Override            
               public void onClick(View v) {
                    int itemPosition = lstPersonnes.getCheckedItemPosition();
                    selectedItem = lstPersonnes.getItemAtPosition(itemPosition).toString();

                    String personne = adapter.getItem(itemPosition);

                    adapter.remove(personne);
                    personne = txtNouveauNom.getText().toString();
                    adapter.insert(personne, itemPosition);

                    adapter.notifyDataSetChanged();             }
            });

但它不是一种非常优雅的方式......如果可能的话,我希望避免将其移除并重新插入。

有什么想法吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

为什么你不能像这样改变价值:

int itemPosition = lstPersonnes.getCheckedItemPosition();
String personne = adapter.getItem(itemPosition);
personne = txtNouveauNom.getText().toString();
adapter.notifyDataSetChanged();

如果adapter.notifyDataSetChanged()无效,请尝试listView1.setAdapter(adapter)刷新列表视图。

<强>更新

试试这个:

btnModifierNom.setOnClickListener(new OnClickListener()
{            
    @Override            
    public void onClick(View v)
    {
        int itemPosition = lstPersonnes.getCheckedItemPosition();            
        // Gets the textview of the item at the position in the listview
        ((TextView)lstPersonnes.getChildAt(itemPosition)).setText(txtNouveauNom.getText().toString());

        // Put this
        adapter.notifyDataSetChanged();
        // Or this to refresh listview
        lstPersonnes.setAdapter(adapter);
    }
});

答案 1 :(得分:0)

看起来ArrayAdapter适用于静态数据。尝试从BaseAdapter扩展,然后notifyDataSetChanged()将起作用。