2014-04-25 3 views
0

Handler이 있습니다. 내 입니다. 이 HandlerMainActivity의 레이아웃 안에있는 내 Fragment 중 하나의 UI를 업데이트해야합니다.다른 클래스의 핸들러에 데이터 전달

그런 다음 루프가있는 별도의 클래스가 있습니다. 이 클래스를 만들면 myLooper이라고 가정 해 루프의 내부 정보를 Handler에 내 MainActivity에 보냅니다. 그런 다음 해당 데이터를 MainActivity의 조각 내에서 구현 한 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(); 
    } 


} 
마지막으로

포함 FragmentGraphViewupdateGraphUI 방법 :

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로 전송되지 않고 업데이트되지 않습니다 ...

답변

1

MainActivity에서 핸들러 인스턴스의 이름을 "myHandler"로 지정하고 MyLooper 클래스 "_myIOIOHandler"를 전달합니다.

관련 문제