java - 将数据从另一个类传递给处理程序

标签 java android android-fragments handler ioio

我的 MainActivity 中有一个 Handler。此 Handler 必须更新 MainActivity 布局内我的一个 Fragment 的 UI。

然后我有一个单独的类,它有一个循环;当我创建此类时,我们将其命名为 myLooper,它会进行某种计算,然后将循环内的信息发送到我的 MainActivity 中的 Handler >。然后,它将将该数据更新到我在 MainActivity 的 Fragment 中实现的 GraphView

流程: 步骤1:在MyLooper上计算数据。 第 2 步:通过我的 Handler 将数据发送到 MainActivity。 第 3 步:让我的 Handler 使用发送的数据更新 MainActivityFragmentGraphView

相关代码:

public class MainActivity extends ActionBarActivity implements
        ActionBar.TabListener {


    public MyLooper myDataLooper;
    Fragment graphFrag = fragment_graphpage.newInstance(1);
    public final Handler myHandler = new Handler() {

        @Override
        public void handleMessage(Message msg) {
            // TODO Auto-generated method stub

                ((fragment_graphpage) graphFrag).updateGraphUI(msg.getData().getFloat("myvoltage"));
            }
        };
    SectionsPagerAdapter mSectionsPagerAdapter;
    globalControlInstance globalControl;
    ViewPager mViewPager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        globalControl = globalControlInstance.getInstance();

        myDataLooper = (IOIOBoard) getApplicationContext();
        myDataLooper.create(getBaseContext(), this,_myIOIOHandler);
        myDataLooper.start();
 }

MyLooper 类:

public class MyLooper extends Application implements IOIOLooperProvider {


    globalControlInstance globalData = globalControlInstance.getInstance();
    public AnalogInput AI1;
    public Handler IOIOHandler;
    private final IOIOAndroidApplicationHelper helper_ = new IOIOAndroidApplicationHelper(
            this, this);

    protected void create(Context myContext, Activity myActivity, Handler myHandler) {
        IOIOHandler = myHandler;
        helper_.create();
    }

    protected void destroy() {
        helper_.destroy();
    }

    protected void start() {
        helper_.start();
    }

    protected void stop() {
        helper_.stop();
    }

    protected void restart() {
        helper_.restart();
    }

    class Looper extends BaseIOIOLooper {

        @Override
        protected void setup() throws ConnectionLostException {

        }

        @Override
        public void loop() throws ConnectionLostException, InterruptedException {
            Message myVoltageMessage = new Message();
            Bundle myVoltageBundle = new Bundle();
            myVoltageBundle.putFloat("myvoltage", AI1.getVoltage());
            myVoltageMessage.setData(myVoltageBundle);
            IOIOHandler.sendMessage(myVoltageMessage);
        }
    }

    @Override
    public IOIOLooper createIOIOLooper(String connectionType, Object extra) {
        return new Looper();
    }


}

最后是包含我的 GraphViewupdateGraphUI 方法的 Fragment。:

public void updateGraphUI(float newReading) {
    final double newReadingDouble = newReading;
        mTimer2 = new Runnable() {

            @Override
            public void run() {
                graphLoopCounter++;

                if (globalData.isLiveUpdatingEnabled()) {
                alarmCheck(newReadingDouble);
                globalData.setGraph2LastXValue(globalData
                        .getGraph2LastXValue() + 1d);
                globalData.getGraphViewSeries().appendData(
                        new GraphViewData(globalData.getGraph2LastXValue(),
                                newValue), true, 1000);
                if (globalData.getGraphPeak() < newReadingDouble) {
                    globalData.setGraphPeak(newReadingDouble);
                    graphPeak.setText("Graph Peak: "
                            + Double.toString(newReadingDouble));
                }


                    avgSum += globalData.getLatestGraphData();
                        graphAvg.setText("Graph Avg: " + Double.toString(avgSum/graphLoopCounter));


                mHandler.postDelayed(this, 100);
                }
            }
        };
        mHandler.postDelayed(mTimer2, 100);

}

其中mHandler是我的Fragment实现中的处理程序。并且 mTimer1mTimer2 都是 Runnable

我的问题是;无论我尝试做什么,数据都不会发送到我的 GraphView 并且它永远不会更新...

最佳答案

在 MainActivity 中,您将 Handler 实例命名为“myHandler”,然后传递 MyLooper 类“_myIOIOHandler”。

关于java - 将数据从另一个类传递给处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23297951/

相关文章:

Java URI 类 : constructor determines whether or not query is encoded?

java - 在 Mac 上的 Android Studio 中找不到 OnePlus One

java - 如何在另一个方法中使用同一个类中的方法,这需要不同的参数

android - Dagger 2.11 注入(inject)不适用于 fragment

android - 设置工具栏标题

android - 从 Fragments 重构为 Activity

java - 快速查找 Java 是否从 Windows cmd 或 Cygwin 终端启动

java - RealmObjects 中的自定义方法...解决方案?

java - 通过广播调用服务

Android ViewFlipper 动画不渲染背景?