Android从mainActivity中刷新所有片段中的TextView

时间:2016-11-09 19:38:23

标签: java android android-fragments

无法理解如何刷新/更新我的所有textview。它们位于13个不同的片段中,我无法按照自己的意愿访问它们。

在简单的Java中,我得到了一个简单的游戏循环

//Game Loop
            boolean GameLoop = true;
            while(GameLoop){
            CG.refresh();
            }    

在大班上我得到了这样的东西:

void refresh() {            
    Labels.MoneyLabel.setText("Money: " + CarMain.main[0]);
    Labels.BoxesLabel.setText("Boxes: " + CarMain.main[2]);

}

一切都奏效了。现在在Android中我无法更新我的文本视图。

在Android上,onCreate方法制作了简单的游戏循环

     Thread t = new Thread() {

        @Override
        public void run() {
            try {
                while (!isInterrupted()) {
                    Thread.sleep(1000);
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Collections();
                            SaveFile();
                            Refresh();
                        }
                    });
                }
            } catch (InterruptedException e) {
            }
        }
    };

    t.start();

并希望刷新文本视图,例如

public void Refresh(){

 TextView MoneyTXT = (TextView) rootView.findViewById(R.id.MoneyText);
            MoneyTXT.setText("Money: " + Main.Money[0]);
            TextView  MoneyPerTapTXT = (TextView) rootView.findViewById(R.id.MoneyPerTapTView);
            MoneyPerTapTXT.setText("$ " + Main.Money[1] + " per tap");
                TextView BoxesTXT = (TextView) rootView.findViewById(R.id.BoxesText);
                BoxesTXT.setText("Boxes: " + Main.Boxes[0]);
                TextView BoxesPerTapTXT = (TextView) rootView.findViewById(R.id.BoxesPerTapTView);
                BoxesPerTapTXT.setText("Points " + Main.Boxes[1] + " per tap");

}

但是得到了错误,因为Textviews位于不同的布局中。

2 个答案:

答案 0 :(得分:0)

从活动更新片段:

假设您的片段已添加到ID为R.id.frame的视图中,您可以执行以下操作:

// Get current Fragment   
Fragment fragment = getFragmentManager().findFragmentById(R.id.frame);
if (fragment instanceof MyFragment) { //or whatever your Fragment's name is
    ((MyFragment) fragment).updateTextView(); // This is a method you will have to define yourself
}

这有意义吗?

答案 1 :(得分:0)

如果您不想处理via方法回调机制,可以使用第三方库(如GreenRobot EventBus)尝试事件回调机制。

简单的例子,

定义事件:

public static class MessageEvent { /* Additional fields if needed */ }

准备订阅者:(订阅您的活动以接收活动) 声明并注释您的订阅方法,可选择指定线程模式:

@Subscribe(threadMode = ThreadMode.MAIN)  
public void onMessageEvent(MessageEvent event) {/* Do something */};

注册并取消注册您的订阅者。例如,在Android上,活动和片段通常应根据其生命周期进行注册:

@Override
public void onStart() {
    super.onStart();
    EventBus.getDefault().register(this);
}

@Override
public void onStop() {
    super.onStop();
    EventBus.getDefault().unregister(this);
}

发布活动:(点击活动后点击片段按钮,会立即通知活动)

EventBus.getDefault().post(new MessageEvent());