在android中将视图更改为带有片段的视图

时间:2017-02-19 05:13:27

标签: android xml android-fragments

我试图使用setContentView切换到里面有片段的布局 但它每次都会崩溃 我该怎么办? 这是我的整个代码: (当我单击activity_main中的按钮时,它必须切换到fragment_layout) (fragmant_layout有一个片段,frgment的布局是te layout1) (当我按下按钮切换时它会崩溃)

主要活动:

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

public void switchlayout(View view) {//when the button in clicked
    setContentView(R.layout.fragment_layout);
}

}

片段类:

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

activity_main.xml中:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".fragmenttest.MainActivity">




<Button
    android:text="Button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="switchlayout"
    android:layout_marginTop="74dp"
    android:id="@+id/button" />
</RelativeLayout>

fragment_layout.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:name="alirezamellat.fragmenttest.frgment"
    ></fragment>

</LinearLayout>

layout1.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<View
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorAccent"></View>

</LinearLayout>

2 个答案:

答案 0 :(得分:2)

请考虑以下几点::

  1. 在您的父布局(activity_main.xml)上,在Relative布局中,添加另一个名为FrameLayout的布局。
  2. 在片段布局(fragment_layout.xml)上,删除片段并将layout1.xml的布局添加到fragment_layout.xml
  3. 在您的片段类(MyFragment)上,将fragment_layout.xml扩展到容器并返回视图(类名应以大写字母开头,因此将其命名为MyFragment)
  4. 在Activity类上,将以下代码放在onclick侦听器上。

    //onClick on OnClickListener
    
     MyFragment fragment = new MyFragment();
     getSupportFragmentManager().beginTransaction()
         .add(R.id.frame_layout, fragment)
         .commit();
    

答案 1 :(得分:0)

一旦设置了活动的布局,它可以在以后更改。 有许多方法可以实现这一点,最简单的方法是使用包装器布局,然后使用FragmentManager类将片段注入其中。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".fragmenttest.MainActivity">

<FrameLayout
    android:id="@+id/wrapper"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
</FrameLayout>
<Button
    android:text="Button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="switchlayout"
    android:layout_marginTop="74dp"
    android:id="@+id/button" />
</RelativeLayout>

然后在您的按钮上单击添加您的片段。

getSupportFragmentManager().beginTransaction().add(R.id.wrapper, MyFragment.newInstance(), "FragTag").commit();

请记住,你必须要处理你的按钮,因为它仍会在你的片段顶部可见。