我正在为Android移动设备创建电子账单打印应用程序。我已经成功连接了应用程序和小型蓝牙POS打印机。我也可以通过它打印帐单。
我已经为此应用程序使用了片段,并且通过主要活动生成了所有片段。
我的问题是,如果我更改片段并按打印按钮,它将要求再次连接打印机。我需要避免该过程,因为一旦用户单击上一个片段中的“打印”按钮(如果用户使用该片段进行打印,这将起作用,否则它应该在这里要求与打印机连接),他/她已经连接到打印机。 / p>
当我输入新片段,然后该片段为 handler 创建新对象时,就会出现问题,我需要将该 handler 放入 singleton 。 此处理程序用于通过蓝牙与打印机连接。我尝试了一些解决方案,但失败了。有什么办法可以做到这一点。请帮助我找到一个更好的解决方案。预先感谢。
这是代码- 处理程序和片段的onCreateView,
private final Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case BluetoothService.MESSAGE_STATE_CHANGE:
switch (msg.arg1) {
case BluetoothService.STATE_CONNECTED: //������
Toast.makeText(getContext(), "Connect successful",
Toast.LENGTH_SHORT).show();
isDeviceConnected = true;
// updateConnectBtn();
// btnClose.setEnabled(true);
// btnSendDraw.setEnabled(true);
Log.v("Pasindu", "Connected!");
break;
case BluetoothService.STATE_CONNECTING: //��������
Log.d("��������", "��������.....");
break;
case BluetoothService.STATE_LISTEN: //�������ӵĵ���
case BluetoothService.STATE_NONE:
Log.d("��������", "�ȴ�����.....");
break;
}
break;
case BluetoothService.MESSAGE_CONNECTION_LOST: //�����ѶϿ�����
Toast.makeText(getContext(), "Device connection was lost",
Toast.LENGTH_SHORT).show();
isDeviceConnected = false;
// btnClose.setEnabled(false);
// btnSendDraw.setEnabled(false);
break;
case BluetoothService.MESSAGE_UNABLE_CONNECT: //�������豸
Toast.makeText(getContext(), "Unable to connect device",
Toast.LENGTH_SHORT).show();
break;
}
}
};
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.data_fragment, container, false);
btn_proceed = (Button) view.findViewById(R.id.btn_proceed);
mService = new BluetoothService(getContext(), mHandler);
cmd = new byte[3];
isDeviceConnected = ((MainActivity)this.getActivity()).isDeviceConnected;
btn_proceed.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
print();
}
});
return view;
}