在 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 的代码以获取参考实现。