Java 如何正确更新片段中的GraphView对象(GraphView不使用传入数据进行更新)
我正在进行一个项目,通过蓝牙低能量收集4类传感器数据,并在选项卡式滑动视图中以单个片段显示这些数据。目前,我的BLE功能完全正常工作,并且收到了预期的值。但是,在实现了Fragment类、FragmentPagerAdapter类和MainActivity之后,我的图不会使用传入的数据进行更新 现在,我很难确定是否正确引用了片段,或者是否错误地实现了GraphView功能。我试着引用GraphView文档,但没有用。此外,片段中的TextView正在按预期更新,只是GraphView从未绘制任何数据 DemoFragment类:Java 如何正确更新片段中的GraphView对象(GraphView不使用传入数据进行更新),java,android,android-fragments,android-viewpager,android-graphview,Java,Android,Android Fragments,Android Viewpager,Android Graphview,我正在进行一个项目,通过蓝牙低能量收集4类传感器数据,并在选项卡式滑动视图中以单个片段显示这些数据。目前,我的BLE功能完全正常工作,并且收到了预期的值。但是,在实现了Fragment类、FragmentPagerAdapter类和MainActivity之后,我的图不会使用传入的数据进行更新 现在,我很难确定是否正确引用了片段,或者是否错误地实现了GraphView功能。我试着引用GraphView文档,但没有用。此外,片段中的TextView正在按预期更新,只是GraphView从未绘制任何
public class DemoFragment extends Fragment {
private TextView textView;
private LineGraphSeries<DataPoint> series;
private GraphView graph;
private int position;
//UpdateSessionData updateIt;
/*public DemoFragment() {
// Required empty public constructor
}*/
public static DemoFragment newInstance(int pos){
Bundle args = new Bundle();
args.putInt("position", pos);
DemoFragment fragment = new DemoFragment();
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
position = getArguments().getInt("position");
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_demo, container, false);
return view;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState){
super.onViewCreated(view, savedInstanceState);
graph = (GraphView) view.findViewById(R.id.graph);
textView = view.findViewById(R.id.classification_txt);
graph.getViewport().setScalable(true);
graph.getViewport().setScalableY(true);
graph.getViewport().setScrollable(true);
graph.getViewport().setScrollableY(true);
graph.getViewport().setYAxisBoundsManual(true);
graph.getViewport().setMaxY(4095);
graph.getViewport().setMinY(0);
graph.getViewport().setXAxisBoundsManual(true);
graph.getViewport().setMaxX(100);
graph.getViewport().setMinX(0);
series = new LineGraphSeries<DataPoint>();
graph.addSeries(series);
textView.setText("Classification: " + position);
}
public void addDataPoint(DataPoint point){
series.appendData(point, true, 10000);
graph.refreshDrawableState();
}
/*interface UpdateSessionData{
void updateFragment(int x, int y);
}*/
}
相关活动代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
o2frag = DemoFragment.newInstance(0);
ft.add(R.id.pager, o2frag, "o2");
gsrFrag = DemoFragment.newInstance(1);
ft.add(R.id.pager, gsrFrag, "gsr");
hrFrag = DemoFragment.newInstance(2);
ft.add(R.id.pager, hrFrag, "hr");
emgFrag = DemoFragment.newInstance(3);
ft.add(R.id.pager, emgFrag, "emg");
ft.show(emgFrag);
ft.commit();
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
displayFragment(position);
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
protected void displayFragment(int fragPosition){
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
DemoFragment fragment = (DemoFragment) adapter.getItem(fragPosition);
ft.show(fragment);
ft.commit();
}
@Override
public void onCharacteristicWriteRequest(BluetoothDevice device,
int requestId,
BluetoothGattCharacteristic characteristic,
boolean preparedWrite,
boolean responseNeeded,
int offset,
final byte[] value) {
super.onCharacteristicWriteRequest(device, requestId, characteristic, preparedWrite, responseNeeded, offset, value);
Log.i(TAG, "onCharacteristicWriteRequest "+characteristic.getUuid().toString());
if (UARTProfile.RX_WRITE_CHAR.equals(characteristic.getUuid())) {
//IMP: Copy the received value to storage
storage = value;
if (responseNeeded) {
mGattServer.sendResponse(device,
requestId,
BluetoothGatt.GATT_SUCCESS,
0,
value);
Log.d(TAG, "Received data on "+characteristic.getUuid().toString());
Log.d(TAG, "Received data "+ bytesToHex(value));
}
//IMP: Respond
sendOurResponse();
mHandler.post(new Runnable() {
@Override
public void run() {
//Toast.makeText(LoginActivity.this, "We received data", Toast.LENGTH_SHORT).show();
//Toast.makeText(SessionActivity.this, "We received data: " + bytesToHex(value), Toast.LENGTH_SHORT).show();
short [] dataArray = byteArrayToShortArray(value);
Toast.makeText(SwipeDataActivity.this, "We received data: " + Arrays.toString(dataArray), Toast.LENGTH_SHORT).show();
currentTime = SystemClock.elapsedRealtime();
long elapsedTime = currentTime - startTime;
DataPoint [] points = new DataPoint[4];
for(int i = 0; i < dataArray.length; i++){
points[i] = new DataPoint(currentTime, (long) dataArray[i]);
}
o2frag.addDataPoint(points[0]);
gsrFrag.addDataPoint(points[1]);
hrFrag.addDataPoint(points[2]);
emgFrag.addDataPoint(points[3]);
}
});
}
}
@覆盖
创建时受保护的void(Bundle savedInstanceState){
FragmentTransaction ft=getSupportFragmentManager().beginTransaction();
o2frag=DemoFragment.newInstance(0);
ft.add(R.id.pager,o2frag,“o2”);
gsrFrag=DemoFragment.newInstance(1);
ft.add(R.id.pager,gsrFrag,“gsr”);
hrFrag=DemoFragment.newInstance(2);
ft.add(R.id.pager,hrFrag,“hr”);
emgFrag=DemoFragment.newInstance(3);
ft.add(R.id.pager,emgFrag,“emg”);
ft.show(emgFrag);
ft.commit();
viewPager.addOnPageChangeListener(新的viewPager.OnPageChangeListener(){
@凌驾
已滚动页面上的公共无效(int-position、float-positionOffset、int-positionOffsetPixels){
}
@凌驾
已选择页面上的公共无效(内部位置){
显示片段(位置);
}
@凌驾
公共无效onPageScrollStateChanged(int状态){
}
});
受保护的void displayFragment(int fragPosition){
FragmentTransaction ft=getSupportFragmentManager().beginTransaction();
DemoFragment=(DemoFragment)adapter.getItem(fragPosition);
ft.show(片段);
ft.commit();
}
@凌驾
public void OnCharacteristicWriterRequest(蓝牙设备、,
int requestId,
蓝牙特征,
布尔预写写,
boolean responseeded,
整数偏移,
最终字节[]值){
super.onCharacteristicWriterRequest(设备、请求ID、特征、准备写入、响应写入、偏移量、值);
Log.i(标记“onCharacteristicWriteRequest”+characteristic.getUuid().toString());
if(UARTProfile.RX_WRITE_CHAR.equals(characteristic.getUuid())){
//IMP:将收到的值复制到存储器
储存=价值;
if(responseeded){
mGattServer.sendResponse(设备,
请求ID,
蓝牙:关贸总协定的成功,
0,
价值);
Log.d(标记为“+characteristic.getUuid().toString()上的接收数据”);
Log.d(标签,“接收数据”+bytesToHex(值));
}
//小鬼:回答
sendOurResponse();
mHandler.post(新Runnable(){
@凌驾
公开募捐{
//Toast.makeText(LoginActivity.this,“我们收到数据”,Toast.LENGTH_SHORT.show();
//Toast.makeText(SessionActivity.this,“我们收到的数据:”+bytesToHex(value),Toast.LENGTH_SHORT.show();
short[]dataArray=byteArrayToShortArray(值);
Toast.makeText(SwipeDataActivity.this,“我们收到的数据:”+Arrays.toString(dataArray),Toast.LENGTH_SHORT.show();
currentTime=SystemClock.elapsedRealtime();
long elapsedTime=当前时间-开始时间;
数据点[]点=新数据点[4];
for(int i=0;i
如果您能帮助我们理解GraphView没有更新的原因,我们将不胜感激!提前感谢您抽出时间,我很抱歉代码太多,但我想确保相关信息可用
@Override
protected void onCreate(Bundle savedInstanceState) {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
o2frag = DemoFragment.newInstance(0);
ft.add(R.id.pager, o2frag, "o2");
gsrFrag = DemoFragment.newInstance(1);
ft.add(R.id.pager, gsrFrag, "gsr");
hrFrag = DemoFragment.newInstance(2);
ft.add(R.id.pager, hrFrag, "hr");
emgFrag = DemoFragment.newInstance(3);
ft.add(R.id.pager, emgFrag, "emg");
ft.show(emgFrag);
ft.commit();
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
displayFragment(position);
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
protected void displayFragment(int fragPosition){
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
DemoFragment fragment = (DemoFragment) adapter.getItem(fragPosition);
ft.show(fragment);
ft.commit();
}
@Override
public void onCharacteristicWriteRequest(BluetoothDevice device,
int requestId,
BluetoothGattCharacteristic characteristic,
boolean preparedWrite,
boolean responseNeeded,
int offset,
final byte[] value) {
super.onCharacteristicWriteRequest(device, requestId, characteristic, preparedWrite, responseNeeded, offset, value);
Log.i(TAG, "onCharacteristicWriteRequest "+characteristic.getUuid().toString());
if (UARTProfile.RX_WRITE_CHAR.equals(characteristic.getUuid())) {
//IMP: Copy the received value to storage
storage = value;
if (responseNeeded) {
mGattServer.sendResponse(device,
requestId,
BluetoothGatt.GATT_SUCCESS,
0,
value);
Log.d(TAG, "Received data on "+characteristic.getUuid().toString());
Log.d(TAG, "Received data "+ bytesToHex(value));
}
//IMP: Respond
sendOurResponse();
mHandler.post(new Runnable() {
@Override
public void run() {
//Toast.makeText(LoginActivity.this, "We received data", Toast.LENGTH_SHORT).show();
//Toast.makeText(SessionActivity.this, "We received data: " + bytesToHex(value), Toast.LENGTH_SHORT).show();
short [] dataArray = byteArrayToShortArray(value);
Toast.makeText(SwipeDataActivity.this, "We received data: " + Arrays.toString(dataArray), Toast.LENGTH_SHORT).show();
currentTime = SystemClock.elapsedRealtime();
long elapsedTime = currentTime - startTime;
DataPoint [] points = new DataPoint[4];
for(int i = 0; i < dataArray.length; i++){
points[i] = new DataPoint(currentTime, (long) dataArray[i]);
}
o2frag.addDataPoint(points[0]);
gsrFrag.addDataPoint(points[1]);
hrFrag.addDataPoint(points[2]);
emgFrag.addDataPoint(points[3]);
}
});
}
}