Handler
이 있습니다. 내 입니다. 이 Handler
은 MainActivity
의 레이아웃 안에있는 내 Fragment
중 하나의 UI를 업데이트해야합니다.다른 클래스의 핸들러에 데이터 전달
그런 다음 루프가있는 별도의 클래스가 있습니다. 이 클래스를 만들면 myLooper
이라고 가정 해 루프의 내부 정보를 Handler
에 내 MainActivity
에 보냅니다. 그런 다음 해당 데이터를 MainActivity
의 조각 내에서 구현 한 GraphView
에 업데이트합니다.
흐름 : 1 단계 : 데이터를 MyLooper
으로 계산하십시오. 2 단계 : Handler
을 통해 MainActivity
으로 데이터를 보냅니다. 3 단계 : 내 Handler
업데이트 MainActivity
의 Fragment
의 GraphView
을 보낸 데이터로 보내주십시오.
관련 코드 :
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();
}
}
마지막으로
포함 Fragment
내 GraphView
의 updateGraphUI
방법 :
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
의 구현. mTimer1
및 mTimer2
은 모두 Runnable
입니다.
내 문제는; 데이터를 처리하려고해도 GraphView로 전송되지 않고 업데이트되지 않습니다 ...