Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 数据库更新后更新片段TextView_Android_Android Fragments_Android Sqlite - Fatal编程技术网

Android 数据库更新后更新片段TextView

Android 数据库更新后更新片段TextView,android,android-fragments,android-sqlite,Android,Android Fragments,Android Sqlite,我希望在数据库更新完成后在片段中更新textview 我有MainActivity,它承载MainFragment MainFragment中有一个TextView,它是数据库中a列的总和 在MainActivity中,我按下一个按钮,打开一个对话框,可以在其中向数据库中的a列添加值。对话框出现在片段顶部,但当我按OK并将新值发送到数据库,然后尝试更新textview时,它不会更新 我的片段中有以下内容,但我想它永远不会被调用 @Override public void onResume

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

我有MainActivity,它承载MainFragment

MainFragment中有一个TextView,它是数据库中a列的总和

在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

编辑:

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

正如您所说,onResume()不是放置该片段的最佳方式。我认为最好的方法应该是使用
startActivityForResult(intent,您的请求代码)
启动对话框窗口

然后,在将值添加到数据库并希望返回到“活动”的对话框中,执行以下操作:

setResult(RESULT_OK);
finish();
回到主活动中,使用onActivityResult()更新文本视图:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (requestCode) {
        case your_requestCode: {
            //...
            DO YOUR STUFF HERE
        }
        break;
    }
}
要从主活动更新片段的textview,您应该实现一个回调接口

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

在前面评论的ActivityResult中有一个:

fragCall.modifyTextView(yourText);
最后,在片段上实现回调侦听器:

public class YourFragment extends Fragment implements FragmentCallback {
在方法内部,您可以更改textview的文本:

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

只需重写fragment的onStart方法并调用特定的textView来更新该方法中的文本

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

为什么不在单击该对话框时设置文本视图值?数据库操作非常快,可以加载这些数据,并从数据库中再次读取这些数据,直到onResume方法调用为止。
@Override
public void onStart() {
    super.onStart();
    textView.setText(/* update method */);
    //TODO call your method here.
}