Я пытаюсь понять и перевести код Java на kotlin. Код доступен здесь .
В основном есть два файла классов
DeviceListActivity
: Позволяет пользователю выбрать item
из ListView
SerialConsoleActivity
: Выполняет операцию чтения / записи для выбранного item
Соответствующий раздел кода из DeviceListActivity
следующий:
private void showConsoleActivity(UsbSerialPort port) {
SerialConsoleActivity.show(this, port);
}
Соответствующий фрагмент кода из SerialConsoleActivity
выглядит следующим образом:
public class SerialConsoleActivity extends Activity {
private final String TAG = SerialConsoleActivity.class.getSimpleName();
/**
* Driver instance, passed in statically via
* {@link #show(Context, UsbSerialPort)}.
*
* <p/>
* This is a devious hack; it'd be cleaner to re-create the driver using
* arguments passed in with the {@link #startActivity(Intent)} intent. We
* can get away with it because both activities will run in the same
* process, and this is a simple demo.
*/
private static UsbSerialPort sPort = null;
...
//more code
...
static void show(Context context, UsbSerialPort port) {
sPort = port;
final Intent intent = new Intent(context, SerialConsoleActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NO_HISTORY);
context.startActivity(intent);
}
}
Часть, которую я не могу понять, это как статический метод show
из SerialConsoleActivity
может сохранить передаваемый объект port
? Нет экземпляра родительского объекта задействованный класс (что также является целью статического метода).
Для достижения эффекта, подобного описанному выше, я написал следующий код, но он не работает:
class MainActivity : AppCompatActivity() {
var sPort :UsbSerialPort?=null
private val GET_AVAILABLE_USB_DEVICE = 1
companion object {
const val PORT = "port"
fun show(context: Context, port: UsbSerialPort) {
sPort = port
}
}
sПорт недоступен изнутри шоу.
Если я переместу функцию show
за пределы объекта-компаньона,
Тогда я не могу сделать следующее
MainActivity.show(this, port_obj)
Предупреждение "Коварный хак" в оригинальном посте предлагает воссоздать драйвер путем передачи аргументов, но, увы, неясно, как создать объект порта из аргументов .
Другой вариант - реализовать сериализуемый объект (поскольку порт еще не сериализуем) и передать его через намерение, но я еще не разбираюсь в сериализации. Таким образом, я ищу такой же обходной путь, как и в оригинальной работе «kotlin'y way». Пожалуйста, помогите.