我有一个片段,我称之为asynctask获取一些数据,然后更新一些textview。
问题在于,当我第一次访问此片段时,整个过程运行良好。如果我更改为另一个片段然后返回,则textview不会通过settext更新,但如果我在更新后调用gettext,它将返回应该显示的值。
我在fragment的onCreateView中初始化textviews并在asynctask的onPostExecute中更新它们。
我希望我解释得很好..任何想法可能是什么问题?
onCreateView:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_medical, container, false);
mContext = (FragmentActivity)getActivity();
current_meas_data = (TextView) v.findViewById(R.id.current_measurement_data);
bt = new MedicalBluetooth(mContext);
return v;
}
在onStart:
public void onStart() {
super.onStart();
boolean btavailable = bt.isBluetoothAvailable();
if (btavailable == false) {
Toast.makeText(mContext, "Bluetooth is not available",
Toast.LENGTH_LONG).show();
return;
}
boolean btenabled = bt.isBluetoothEnabled();
if (btenabled) {
bt.setupService();
bt.startService();
} else {
Intent enableIntent = new Intent(
BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableIntent, 1);
}
bt.setOnDataReceivedListener(new MedicalBluetooth.OnDataReceivedListener() {
public void onDataReceived(final byte[] data, String message) {
new GetMeasurementTask().execute(data);
}
});
}
的AsyncTask:
private class GetMeasurementTask extends AsyncTask<byte[], Integer, Boolean> {
private ProgressDialog dialog = new ProgressDialog(mContext);
protected void onPreExecute() {
this.dialog.setMessage("Please wait");
this.dialog.show();
}
@Override
protected Boolean doInBackground(byte[]... params) {
com.example.bluetoothlibrary.Measurement mes = new com.example.bluetoothlibrary.Measurement();
mes = bt.manageData(params[0]);
return true;
}
protected void onPostExecute(Boolean result) {
if (dialog.isShowing()) {
dialog.dismiss();
}
if (result == true) {
//Toast.makeText(mContext, "Call Successful!", Toast.LENGTH_LONG).show();
Log.d("BEFORE SETTEXT",current_meas_data.getText().toString());
current_meas_data.setText(mes.data);
Log.d("AFTER SETTEXT",current_meas_data.getText().toString());
}
if (result == false) {
//Toast.makeText(mContext, "Call Error", Toast.LENGTH_LONG).show();
}
}
}
日志说:
在SETTEXT之前:
在SETTEXT之后:20
但“current_meas_data”为空。
答案 0 :(得分:0)
据我所知,您可能正在片段A的onCreatView中调用异步任务。因此,如果您转到片段B并按下后退按钮,片段A的onCreateView不会被触发,因为它已经在堆。为此,在片段A中的onResume()中调用AsyncTask。因此,在片段A中重写onResume并在其中调用asyncTask.execute()方法。
你肯定需要发布一些代码。