数据库更新后更新片段TextView

时间:2014-07-07 20:59:43

标签: android android-fragments android-sqlite

我希望在完成数据库更新后更新片段中的textview。

我有MainActivity主持MainFragment

MainFragment中有一个TextView,它是我数据库中a列的SUM。

在MainActivity中我有一个按下按钮,打开一个对话框,我可以在数据库中为列a添加一个值。该对话框显示在片段的顶部,但是当我按下OK并将该新值发送到数据库,然后尝试更新textview时它不会更新。

我的片段中有以下内容,但我想它永远不会被调用。

@Override
    public void onResume() {
        super.onResume();
        Log.d("onResume", "here");
        int balance = db.getSum();
        tvBalanceDollar.setText(Integer.toString(balance));
    }

我在哪里可以放入db.getSum();和对话框关闭后更新该字段的setText?

编辑:

片段是否会暂停,或者在活动对话框关闭后重新创建视图?

2 个答案:

答案 0 :(得分:1)

正如你所说,onResume()不是放置它的最好方法。我认为最好的方法是使用startActivityForResult(intent, your_requestCode)启动对话框窗口。

然后,在完成将值添加到数据库并希望返回到您的活动的对话框中,执行:

setResult(RESULT_OK);
finish();

在您的主要活动中使用onActivityResult()来更新textview:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (requestCode) {
        case your_requestCode: {
            //...
            DO YOUR STUFF HERE
        }
        break;
    }
}

要从主活动更新片段的文本视图,您应该实现一个回调接口。

public interface FragmentCallback {
    public void modifyTextView(String text);
} 

然后:

FragmentCallback fragCall;

以前评论过的onActivityResult内部:

fragCall.modifyTextView(yourText);

最后,在片段上实现回调侦听器:

public class YourFragment extends Fragment implements FragmentCallback {

在方法中,您可以更改textview的文字:

@Override
public void modifyTextView(String text) {
    yourTextView.setText(text);
}

答案 1 :(得分:1)

只需覆盖片段的onStart方法,并调用特定的textView来更新该方法中的文本。

@Override
public void onStart() {
    super.onStart();
    textView.setText(/* update method */);
    //TODO call your method here.
}