как данные и макет передаются в макете протея? - PullRequest
1 голос
/ 28 июня 2019

Я пытаюсь создать простое приложение для Android, которое использует плагин proteus для создания динамического представления из файла json. У меня возникают проблемы с передачей макета и данных в infusator proteus.

Ответы [ 2 ]

0 голосов
/ 02 июля 2019

Попробуйте следующий код в onCreate из Activity

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);  // A FrameLayout

final String LAYOUT = "{\n" +
"  \"type\": \"TextView\",\n" +
"  \"textSize\": \"28sp\",\n" +
"  \"text\": \"Hello World!\"\n" +
"}";
final String DATA = "{}";

ViewGroup container = findViewById(R.id.container); // container is the FrameLayout

// create a new instance of proteus
Proteus proteus = new ProteusBuilder().build();

// register proteus with a ProteusTypeAdapterFactory to deserialize proteus jsons
ProteusTypeAdapterFactory adapter = new ProteusTypeAdapterFactory(this);
ProteusTypeAdapterFactory.PROTEUS_INSTANCE_HOLDER.setProteus(proteus);

// deserialize layout and data
Layout layout;
ObjectValue data;
try {
  layout = adapter.LAYOUT_TYPE_ADAPTER.read(new JsonReader(new StringReader(LAYOUT)));
  data = adapter.OBJECT_TYPE_ADAPTER.read(new JsonReader(new StringReader(DATA)));
} catch (IOException e) {
  throw new RuntimeException(e);
}

// create a new ProteusLayoutInflater
ProteusContext context = proteus.createContextBuilder(this).build();
ProteusLayoutInflater inflater = context.getInflater();

// Inflate the layout
ProteusView view = inflater.inflate(layout, data, container, 0);

// Add the inflated layout into the container
container.addView(view.getAsView());

Проверьте simple-proteus-demo

0 голосов
/ 28 июня 2019
Макет

и данные передаются на инфлятор протеза как объект JSON.Поэтому, если вы используете какой-либо веб-сервис, вы должны получить и макет, и данные в виде объектов JSON, а затем создать представление с помощью proteusLayoutInflater.inflate(<layout>, <data>) и затем добавить представление в ViewGroup.

...