代码之家  ›  专栏  ›  技术社区  ›  Yar

以编程方式向现有ViewGroup添加片段

  •  1
  • Yar  · 技术社区  · 11 年前

    我试图在不创建 <fragment> 在我的主布局中,所以我做了这些: 创建了一个新的java类作为Fragment子类,并创建了其布局“R.layout.fraglayout”:

    public class FragOne extends Fragment {
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            return inflater.inflate(R.layout.fraglayout, container, false);
        }
    }
    

    现在,正如API指南所说,我应该将这个新片段添加到ViewGroup中,所以我使用 FragmentTransaction 并将其添加到main_activity的onCreate:

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        //adding the fragment
        FragmentManager fm = getFragmentManager();
        FragmentTransaction ft = fm.beginTransaction();
    
        FragOne newFrag = new FragOne();
        ft.add(R.layout.activity_main, newFrag);
        ft.commit();
    
        setContentView(R.layout.activity_main);
    }
    

    代码不起作用,我的问题是: 文档说我应该将片段添加到当前的“ViewGroup”中,我想我是在将其添加到Layout中。这些都一样吗?如果没有,那么ViewGoup id是什么?

    1 回复  |  直到 11 年前
        1
  •  2
  •   joao2fast4u    11 年前

    这个 ViewGroup 例如,id是 FrameLayout 在您的 Activity 布局,R.layout.activity_main。

    使用transaction.add()时,传递 框架布局 id作为第一个参数。

    还有一件事,在super.onCreate(savedInstanceState)之后立即调用setContentView();然后才能加载碎片。这样地:

    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    
    setContentView(R.layout.activity_main);
    
    //adding the fragment
    FragmentManager fm = getFragmentManager();
    FragmentTransaction ft = fm.beginTransaction();
    
    FragOne newFrag = new FragOne();
    ft.add(R.id.myContainerFrameLayout, newFrag);
    ft.commit();
    

    }