ListView使用setText()时不更新

时间:2013-12-15 22:59:45

标签: android listview adapter

我有一个列表视图,用户可以在其中添加具有特定财务编号的多行。 ListView位于从ListFragment调用的FragmentActivity

ActionBarFragmentActivity)中,有一个按钮可以打开常规Activity,用户可以在其中添加数字。一旦他们点击该页面上的提交,它就会完成该活动,它会调用onActivityResult()我只需执行FragmentTransaction(在上面提到的ListFragment上)来刷新页面和新行显示。

以下是重要部分:如果单击该行,则会打开一个对话框,用户可以在其中更改其编号。我对SQLite数据库(有效)进行了更新,并尝试更新他们正在更改的TextView行的ListView。然而,没有任何反应。

以下是有关更新的代码(我只包含一个字段,但实际上有多个EditText字段和TextView s做同样的事情):

public void onListItemClick(ListView l, View v, final int position, long id) {
    final Debt debt = values.get(position);

    final long boxId = debt.getId();
    BoxName = debt.getName();

    // set up dialog
    final Dialog dialog = new Dialog(getActivity());

    // set up text
    et1 = (EditText) dialog.findViewById(R.id.editText1);
    et1.setText(BoxName);

    Button button = (Button) dialog.findViewById(R.id.button1);
    button.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {

        BoxName = et1.getText().toString();


        datasource.updateDebt(boxId, BoxName, BoxBalance, BoxApr,
                BoxPayment, BoxSApr, BoxSAprTime, BoxDay);

        dialog.dismiss();

            // when I log firstVisible and position; correct numbers appear
        int firstVisible = lv.getFirstVisiblePosition();
        View rowView = lv.getChildAt(position - firstVisible);


        TextView newName = ((TextView) rowView
                        .findViewById(R.id.labelName));

             // this is line that does not work
        newName.setText(BoxName);

            adapter.notifyDataSetChanged();

}

注意:AdapterListview都是静态的,但我尝试使用和不使用相同的结果。

1 个答案:

答案 0 :(得分:1)

在调用adapter.notifyDataSetChanged()

之前,需要更新适配器

不要手动更新ui