我希望在完成数据库更新后更新片段中的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?
编辑:
片段是否会暂停,或者在活动对话框关闭后重新创建视图?
答案 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.
}