在 Android 片段中使用了 Proteus,但在投射充气器时出现错误 - Proteus Android 布局引擎
Used Proteus in an Android Fragment, but getting an error while casting inflater - Proteus Android Layout Engine
请检查我的代码:
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
JSONObject jsonlayout = null ;
try {
jsonlayout = new JSONObject(loadJSONFromAsset(getContext()));
} catch (JSONException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
ProteusLayoutInflater layoutInflater = (ProteusLayoutInflater)inflater;
ProteusView view = layoutInflater.inflate(jsonlayout.toString(), null, container, 0);
return view.getAsView();
}
我想使用 Proteus 库创建视图并将其渲染为片段。
你能告诉我我做错了什么吗?使用此代码,我收到以下错误:
com.android.internal.policy.PhoneLayoutInflater cannot be cast to com.flipkart.android.proteus.ProteusLayoutInflater
下面是 Fragment
的一些示例代码,可以帮助您入门:
remember to add gson-adapter
to the build.gradle
file of your app.
dependencies {
compile 'com.github.flipkart-incubator.proteus:gson-adapter:5.0.0-rc12'
}
在你的Fragment中按照以下内容添加修改:
// some private fields in the fragment
private Proteus proteus;
private ProteusContext context;
private ProteusLayoutInflater layoutInflater;
private Gson gson;
public void onAttach (Activity activity) {
// create a new instance of the proteus type adapter
// for gson and register it with gson.
ProteusTypeAdapterFactory adapter = new ProteusTypeAdapterFactory(activity);
gson = new GsonBuilder().registerTypeAdapterFactory(adapter).create();
// create a new instance of proteus from the builder
proteus = new ProteusBuilder().build();
// get a new context object from proteus
context = proteus.createContextBuilder(activity).build();
// this context object has the proteus layout inflater
layoutInflater = context.getInflater();
// set the instance of proteus
ProteusTypeAdapterFactory.PROTEUS_INSTANCE_HOLDER.setProteus(proteus);
}
public ProteusContext getContext() {
return context;
}
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
String layoutString = loadJSONFromAsset(getContext());
// use gson to deserialize the string into a Layout object.
Layout layout = gson.fromJson(layoutString, Layout.class);
// the use the proteus layout inflater to inflate a new proteus view
ProteusView view = layoutInflater.inflate(layout, new ObjectValue());
return view.getAsView();
}
这本质上是一个工作示例,其中有很多 space 用于增强和改进。您应该前往 git 存储库,克隆它,试用演示应用程序并查看 ProteusActivity 的代码以获取参考实现。
请检查我的代码:
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
JSONObject jsonlayout = null ;
try {
jsonlayout = new JSONObject(loadJSONFromAsset(getContext()));
} catch (JSONException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
ProteusLayoutInflater layoutInflater = (ProteusLayoutInflater)inflater;
ProteusView view = layoutInflater.inflate(jsonlayout.toString(), null, container, 0);
return view.getAsView();
}
我想使用 Proteus 库创建视图并将其渲染为片段。
你能告诉我我做错了什么吗?使用此代码,我收到以下错误:
com.android.internal.policy.PhoneLayoutInflater cannot be cast to com.flipkart.android.proteus.ProteusLayoutInflater
下面是 Fragment
的一些示例代码,可以帮助您入门:
remember to add
gson-adapter
to thebuild.gradle
file of your app.
dependencies {
compile 'com.github.flipkart-incubator.proteus:gson-adapter:5.0.0-rc12'
}
在你的Fragment中按照以下内容添加修改:
// some private fields in the fragment
private Proteus proteus;
private ProteusContext context;
private ProteusLayoutInflater layoutInflater;
private Gson gson;
public void onAttach (Activity activity) {
// create a new instance of the proteus type adapter
// for gson and register it with gson.
ProteusTypeAdapterFactory adapter = new ProteusTypeAdapterFactory(activity);
gson = new GsonBuilder().registerTypeAdapterFactory(adapter).create();
// create a new instance of proteus from the builder
proteus = new ProteusBuilder().build();
// get a new context object from proteus
context = proteus.createContextBuilder(activity).build();
// this context object has the proteus layout inflater
layoutInflater = context.getInflater();
// set the instance of proteus
ProteusTypeAdapterFactory.PROTEUS_INSTANCE_HOLDER.setProteus(proteus);
}
public ProteusContext getContext() {
return context;
}
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
String layoutString = loadJSONFromAsset(getContext());
// use gson to deserialize the string into a Layout object.
Layout layout = gson.fromJson(layoutString, Layout.class);
// the use the proteus layout inflater to inflate a new proteus view
ProteusView view = layoutInflater.inflate(layout, new ObjectValue());
return view.getAsView();
}
这本质上是一个工作示例,其中有很多 space 用于增强和改进。您应该前往 git 存储库,克隆它,试用演示应用程序并查看 ProteusActivity 的代码以获取参考实现。