Android 数据库更新后更新片段TextView
我希望在数据库更新完成后在片段中更新textview 我有MainActivity,它承载MainFragment MainFragment中有一个TextView,它是数据库中a列的总和 在MainActivity中,我按下一个按钮,打开一个对话框,可以在其中向数据库中的a列添加值。对话框出现在片段顶部,但当我按OK并将新值发送到数据库,然后尝试更新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
@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.
}