上一篇的内容讲到的是属于一个静态布局,但是静态布局有很多的不方便,所以在日常使用中使用的很少,所以我们学习了新的一个方法,fragment的动态布局。
在静态布局的基础上,我们把activity.xml文件中的name删除,然后把fragment改成一种布局方式,可以是约束布局,也可以是线性布局。然后我们进入到activity.java文件中,获取到我们创建的一个fragment,获取方式与java中的获取类方法一样,然后我们在下面添加一段这样的代码
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.fragment,blankFragment)
//两个参数,一个是id,一个是布局名字,就是上面定义的fragment
.commit();
这个代码是替换fragment里面的内容变成我们定义的这个blankfragment,前面一个是布局的id,后面的参数,是我们上面新定义的一个fragment对象。然后设置好了之后我们就可以进行一个动态的展示了,这样子更加方便我们替换这个地方的文件。
如果我们有多个fragment布局需要添加到里面,那么我们可以通过一下的代码来进行一个解决。
package com.example.qqfragment;
import androidx.appcompat.app.AppCompatActivity;
import androidx.constraintlayout.widget.ConstraintLayout;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
BlankFragment blankFragment=new BlankFragment();
BlankFragment2 blankFragment2=new BlankFragment2();
BlankFragment3 blankFragment3=new BlankFragment3();
ConstraintLayout message=findViewById(R.id.message);
ConstraintLayout people=findViewById(R.id.people);
ConstraintLayout dongtai=findViewById(R.id.dongtai);
ConstraintLayout buju=findViewById(R.id.buju);
getSupportFragmentManager()
.beginTransaction()
.add(R.id.buju,blankFragment) //两个参数,一个是id,一个是布局名字,就是上面定义的fragment
.commit();
getSupportFragmentManager()
.beginTransaction()
.add(R.id.buju,blankFragment2) //两个参数,一个是id,一个是布局名字,就是上面定义的fragment
.commit();
getSupportFragmentManager()
.beginTransaction()
.add(R.id.buju,blankFragment3) //两个参数,一个是id,一个是布局名字,就是上面定义的fragment
.commit();
getSupportFragmentManager()
.beginTransaction()
.hide(blankFragment2)
.hide(blankFragment3)
.show(blankFragment)//两个参数,一个是id,一个是布局名字,就是上面定义的fragment
.commit();
message.setSelected(true);
people.setSelected(false);
dongtai.setSelected(false);
message.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
message.setSelected(true);
people.setSelected(false);
dongtai.setSelected(false);
getSupportFragmentManager()
.beginTransaction()
.show(blankFragment)
.hide(blankFragment2)
.hide(blankFragment3)//两个参数,一个是id,一个是布局名字,就是上面定义的fragment
.commit();
}
});
people.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
message.setSelected(false);
people.setSelected(true);
dongtai.setSelected(false);
getSupportFragmentManager()
.beginTransaction()
.hide(blankFragment)
.show(blankFragment2)
.hide(blankFragment3) //两个参数,一个是id,一个是布局名字,就是上面定义的fragment
.commit();
}
});
dongtai.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
message.setSelected(false);
people.setSelected(false);
dongtai.setSelected(true);
getSupportFragmentManager()
.beginTransaction()
.hide(blankFragment)
.hide(blankFragment2)
.show(blankFragment3) //两个参数,一个是id,一个是布局名字,就是上面定义的fragment
.commit();
}
});
}
}
这是一个简单的示例,我们可以通过add,hide,show这几个关键字来进行添加,通过按钮的点击事件,我们点击不同的按钮,就可以变成不同的界面展示,然后其他的隐藏起来,我们采用先添加来隐藏的原因就是因为,我们如果i每一次都对这个界面进行一个替换,然后我们如果在这个界面进行了操作,等我们换了一个界面再切换回来的时候,我们之前在这个界面所做的操作直接清除了,所以为了保存我们的操作,我们可以进行一个添加隐藏来写。
补充内容,如何实现按钮点击切换图片
首先将两张图片导入,然后我们我们在drawable文件夹下面新建一个xml文件,然后通过下面这段代码,
<item android:drawable="@drawable/message_select" android:state_selected="true" />
<item android:drawable="@drawable/message_unselect" android:state_selected="false" />
一个是选择时候的展示图片,一个是没有被选择时候的图片,然后我们在按钮点击事件里面添加,
people.setSelected(true);
这样的话,我们就可以通过这个代码然后来进行下面图标的颜色变化,但是每次点击的时候,我们需要把其他的三个点击事件变成false,那样就会变成一个只有一个的点击事件。