Android 碎片使用方法(fragment)
效果如下:
主要的代码:
FragmentManager fm = getFragmentManager(); //创建待添加的布局
FragmentTransaction ft = fm.beginTransaction(); //获取布局
ft.replace(R.id.right_fragment, fragment); //开启布局使用
ft.commit(); //提交布局
View view = inflater.inflate(继承的布局, container,false); //重点代码,left_fragment是Java文件对应的布局
全部代码:
布局:
activity_main:(这里是显示碎片的布局)
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<fragment
android:id="@+id/fram1"
android:layout_width="match_parent"
android:layout_height="0dp"
android:name="com.example.button.Fragment_one"
android:layout_weight="9"/>
<fragment
android:id="@+id/fram2"
android:layout_width="match_parent"
android:layout_height="0dp"
android:name="com.example.button.Navigation"
android:layout_weight="1"/>
</LinearLayout>
切换按钮布局(activity_navigation):
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/text1"
android:layout_weight="1"
android:layout_width="0dp"
android:text="一"
android:gravity="center"
android:layout_height="match_parent"/>
<TextView
android:id="@+id/text2"
android:layout_weight="1"
android:layout_width="0dp"
android:text="二"
android:gravity="center"
android:layout_height="match_parent"/>
<TextView
android:id="@+id/text3"
android:layout_weight="1"
android:layout_width="0dp"
android:text="三"
android:gravity="center"
android:layout_height="match_parent"/>
</LinearLayout>
activity_one:
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#00FF00">
</LinearLayout>
剩下两个布局和activity_one一样只是背景颜色改变而已(就是android:background="#00FF00")。
Java:
Fragment_one:
public class Fragment_one extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.activity_one,container,false);
return view;
}
}
剩下三个布局和Fragment_one一样只是所用的布局不一样而已,改变一下就可以了,其他都不用变(就是R.layout.activity_one改变)。
MainActivity:(主要是使用碎片切换布局的)
public class MainActivity extends AppCompatActivity {
/**
* 主界面
* @param savedInstanceState
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView text1 = findViewById(R.id.text1);
TextView text2 = findViewById(R.id.text2);
TextView text3 = findViewById(R.id.text3);
text1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
repframgent(new Fragment_one()); //切换布局
}
});
text2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
repframgent(new Fragment_two()); //切换布局
}
});
text3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
repframgent(new Fragment_three()); //切换布局
}
});
}
//主要方法
public void repframgent(Fragment fragment){
FragmentManager fm = getFragmentManager(); //创建待添加的布局
FragmentTransaction ft = fm.beginTransaction(); //获取布局
ft.replace(R.id.right_fragment, fragment); //开启布局使用
ft.commit(); //提交布局
}
}
如果还是不懂就加我QQ:1270723700(随时欢迎,帮助解答)