由于子视图尚未初始化,因此无法访问布局inflater

时间:2014-07-03 15:19:06

标签: android android-fragments

我有一个Android活动,它搜索Web服务以显示要显示的新内容,然后显示NoResultFragment或ResultFragment,它表示用户刷滑所返回项目的滑动堆栈。因为我需要管理堆栈,在活动时堆栈变低等时在后台检索更多数据,所有堆栈详细信息都保存在活动级别,yes / no操作触发活动上的方法。到目前为止都很好。

问题是我在ResultFragment类中使用布局inflater来生成动态子视图,每个视图代表堆栈上的一个项目。然后将它们返回到管理它们的Activity控制器,将它们发送到要显示的片段,隐藏它们,移动它们等等,所以我需要从活动访问子项目Views来完成所有这些操作。我需要在ResultFragment中生成实际的子视图,因为这是可视化显示的位置。

我创建ResultFragment,将其设置为内容区域,然后通过调用创建的片段尝试生成子视图。错误是尚未在ResultFragment类上调用onViewCreate()方法,因为它刚刚添加到内容框架中,因此没有layoutinflater,并且返回子视图的方法失败。我觉得这里有一些关于我设计的东西,有人可以解释一下如何做到这一点吗?它只是从Activity类中传递父layoutinflater一样简单吗?

子视图创建方法

public View getChildView(StorySeed seed, int seedIndex)
    {
        final View m_view = inflater.inflate(R.layout.fragment_item, null);                    // Code to populate the view
                      return m_view;
}

活动方法

private void initialiseResults(ArrayList<StorySeed> storySeeds) {
        resultsFragment = new ResultsFragment(storySeeds, getApplicationContext());
        FragmentManager fragmentManager = getFragmentManager();
        fragmentManager.beginTransaction()
                .replace(R.id.content_frame, resultsFragment)
                .commit();

        // load the first results to screen 
        seedIndex = 1;
        for (int i = 0; i < seedsToDisplay; i++) {          
            getNextToStack();           
        }                       
    }

调用getNextToStack()进入Fragment类并调用getChildView()方法

1 个答案:

答案 0 :(得分:0)

我建议您在活动(控制器)中创建视图,并根据需要将它们传递给片段。片段是你的MVC“视图”,它应该只告诉控制器发生了什么。控制器决定在此之后要做什么。

您可以让一个片段替换另一个片段的方式是调用活动上的方法。这是一个简单的例子:

interface IAppController {
    void onResultsNotFound();
}

class MyActivity extends Activity implements IAppController{
    ....
    public void onResultNotFound(){
        //switch fragments
    }
}

class MyFragment {
    ....
    void myMethod(){
        IAppController controller = (IAppController) getActivity();
        controller.onResultsNotFound();
    }
}

希望这有帮助