私がやろうとしているのは、スレッド内でグローバル ArrayList を変更し、この変更された ArrayList をスレッドの外に置くことです。
これは私のコードです。動作しますが、ArrayList を外部から読み取ると正しいサイズですが、この ArrayList のすべての要素が最後に追加されます。つまり、最後の要素に pollingCode、pollingType、polling Value = 0、すべての要素がある場合配列内の値は同じです。
なぜこれが起こるのか誰か知っていますか?
public abstract class OverlayView extends RelativeLayout {
protected ArrayList<InputEvent> eventList = new ArrayList<InputEvent>();
public void StartEventMonitor() {
Thread b = new Thread(new Runnable() {
public void run() {
InputEvent ie= new InputEvent();
while (m_bMonitorOn) {
for (InputDevice idev:events.m_Devs) {
// Open more devices to see their messages
int pollingEvent = idev.getPollingEvent();
int pollingType=idev.getSuccessfulPollingType();
int pollingCode=idev.getSuccessfulPollingCode();
int pollingValue=idev.getSuccessfulPollingValue();
final String line =/* idev.getName()+
": " +*/ idev.getSuccessfulPollingType()+
" " + idev.getSuccessfulPollingCode() +
" " + idev.getSuccessfulPollingValue() +
"\n";
Log.d(LT, "Event:"+line);
ie.setCode(pollingCode);
ie.setType(pollingType);
ie.setValue(pollingValue);
eventList.add(ie);
}
}
}
}
});
b.start();
}
}