如何在点击按钮时打开片段?

时间:2017-02-05 18:32:18

标签: android android-fragments

嘿伙计们,我知道这是一个非常愚蠢的问题,但我在最近几天面对这个问题

这是我的点击事件

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Fragment newCase = new NewCase();
        FragmentTransaction transaction = getFragmentManager().beginTransaction();

        // What to put in the ? marked argument?
        //What is fragment container id?
        transaction.replace(?, newCase );    

        transaction.addToBackStack(null);          
        transaction.commit();
    }
});

这是我的片段类

public class NewCase extends Fragment {}

现在让我知道如何在android中用xml视图打开片段类?

提前致谢

2 个答案:

答案 0 :(得分:2)

activity_layout.xml中,您应添加linearLayout

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
           android:id="@+id/fragment_container"
           android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:orientation="vertical" >

 </LinearLayout>

其余部分取决于你的代码

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){    
    Fragment newCase=new NewCase();
    FragmentTransaction transaction=getFragmentManager().beginTransaction();
    transaction.replace(R.id.fragment_container,newCase); // give your fragment container id in first parameter
    transaction.addToBackStack(null);  // if written, this transaction will be added to backstack
    transaction.commit();

}
});

注意 xml中的Layout ID和容器ID相同

答案 1 :(得分:1)

当你要显示片段不是活动时,对吧?那你为什么要用startActivity()

你可以尝试一下

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener(){
    @Override
    public void onClick(View view){    
        Fragment newCase=new NewCase();
        FragmentTransaction transaction=getFragmentManager().beginTransaction();
        transaction.replace(R.id.your_fragment_container,newCase); // give your fragment container id in first parameter
        transaction.addToBackStack(null);  // if written, this transaction will be added to backstack
        transaction.commit();

    }
});

此处R.id.your_fragment_container将替换为您要放置片段的布局的ID。

例如 - 的 activity_main.xml中

<FrameLayout
        android:id="@+id/frag_container"
        android:layout_width="match_parent"
        android:orientation="vertical"
        android:layout_height="wrap_content">
</FrameLayout>

然后你将使用

transaction.replace(R.id.frag_container,newCase);