非同期タスク内からスイッチの状態を変更する必要があります。カスタム アダプタのスイッチに onClickListner() を設定し、その参照を非同期タスクに渡しています。私の非同期タスクでは、発行の進行状況と onProgressUpdate を使用してスイッチの状態を更新しようとしています。しかし、スイッチの状態は UI で変化していません。誰かがこれについて私を助けてもらえますか?
以下は私のコードです:
DeviceAdapter.java
public class DeviceAdapter extends ArrayAdapter<Device> {
private List<Device> deviceInfo;
private Device device;
private View customView;
private Switch socketSwitch;
private DevicesInfoDbAdapter devicesInfoDbAdapter;
public DeviceAdapter(Context context, List<Device> deviceInfo) {
super(context, R.layout.row_device_details, deviceInfo);
this.deviceInfo = deviceInfo;
device = deviceInfo.get(0);
devicesInfoDbAdapter = DBFactory.getDevicesInfoDbAdapter(getContext());
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater layoutInflater = LayoutInflater.from(getContext());
customView = layoutInflater.inflate(R.layout.row_device_details, parent, false);
socketSwitch = (Switch) customView.findViewById(R.id.socketSwitch);
ImageButton btnRefresh = (ImageButton) customView.findViewById(R.id.btnRefresh);
btnRefresh.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("socketswitch1",""+socketSwitch);
DeviceStatusRefreshAsync deviceStatusRefreshAsync = new DeviceStatusRefreshAsync(socketSwitch);
deviceStatusRefreshAsync.execute();
}
});
return customView;
}
}
DeviceStatusRefreshAsync.java
public class DeviceStatusRefreshAsync extends AsyncTask {
private Switch socketSwitch;
public DeviceStatusRefreshAsync(Switch socketSwitch) {
this.socketSwitch = socketSwitch;
}
@Override
protected Object doInBackground(Object[] params) {
publishProgress(); //Calling to update the switch state
return null;
}
@Override
public void onProgressUpdate(Object[] values) {
socketSwitch.setChecked(true); //Switch state not changing in the UI
}
}