这个文章就讲解一下,如何动态创建一个fragment并激活,然后再创建一个fragmen,然后在两个fragment之间切换。
第一步,我在Activity_main.xml里添加两个按钮,还有一个framelayout,为什么是framelayout呢?因为这个布局简单,当然,用linearlayout或者gridlayout也行。
这里把默认的Container改成了LinearLayout
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<Button
android:id="@+id/btn_1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="btn_1" />
<Button
android:id="@+id/btn_2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="btn_2" />
<FrameLayout
android:id="@+id/framelayout"
android:background="#9986cf"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
然后,再添加两个fragment布局,一个是blankfragment,一个是listfragment。
选择创建这两个选项后,系统会自动添加很多相关的代码,不去动它们就行了。
这里所有项目都是自动添加的。
剩下的,就是在MainActivity.java里添加相应的代码,就能实现blankfragment和listfragment之间的相互切换了。
//为了方便,让类继承监听接口
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//得到这两个按钮的实例,并添加监听
Button btn1=findViewById(R.id.btn_1);
Button btn2=findViewById(R.id.btn_2);
btn1.setOnClickListener(this);
btn2.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()){//这里得到的就是按钮的id
case R.id.btn_1:
changeit(new BlankFragment());//这里实例化了空白fragment
break;
case R.id.btn_2:
changeit(new ItemFragment());//这里实例化了listfragment
break;
}
}
private void changeit(Fragment fragment){
//这里和RecyclerView一样,都是有一个管里类,这里得到一个管理类对象。
FragmentManager fragmentManager=getSupportFragmentManager();
//这个和数据库里差不多,实例化一个trasaction处理事物。
FragmentTransaction transaction=fragmentManager.beginTransaction();
//替换掉原有的framelayout界面对象
transaction.replace(R.id.framelayout,fragment);
//这里是把当前transaction推入到一个返回栈里,这样点返回的时候能返回到刚刚调用的界面
transaction.addToBackStack(null);
//事物的提交
transaction.commit();
}
}
本文暂时没有评论,来添加一个吧(●'◡'●)