【问题标题】:Android refresh TextViews in all fragments from mainActivityAndroid从mainActivity刷新所有片段中的TextViews
【发布时间】:2016-11-09 19:38:23
【问题描述】:

无法理解如何刷新/更新我的所有文本视图。它们位于 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();

并想刷新类似的文本视图

公共无效刷新(){

 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 位于不同的布局中。

【问题讨论】:

  • 13 个片段?它们都同时显示吗?如果您一次更新 13 个片段,您可能做错了什么。
  • @nt-complete 不,不是一次,我只是不知道如何刷新其中的 1 个。那是打开的。我只是想知道,如何访问它们。
  • @nt-complete 举个简单的例子。得到整数 = 点击次数。在按钮点击时,我增加点击次数+1;并且 textview 需要在点击时更新。我想在点击时更新 textview,但不能因为点击方法在 mainActivity 中,而 textview 在布局片段中

标签: java android android-fragments


【解决方案1】:

从 Activity 更新 Fragment:

假设您的 Fragment 已添加到 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
}

这有意义吗?

【讨论】:

    【解决方案2】:

    如果不想通过方法回调机制处理,可以尝试使用第三方库如GreenRobot EventBus的事件回调机制。

    简单的例子,

    定义事件:

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

    准备订阅者:(订阅您的活动以接收事件) 声明和注释你的订阅方法,可选地指定一个线程模式:

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

    注册和注销您的订阅者。例如在 Android 上,Activity 和 Fragment 通常应该根据它们的生命周期进行注册:

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

    发布事件:(点击片段按钮发布事件,Activity会立即得到通知)

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-11
      相关资源
      最近更新 更多