1.介绍
其实就算是一种组件。随可以添加,可以删除,单页应用。有着自己的生命周期,可以对应activity不同的生命周期位置。

2.图示


特别关注的是和activity生命周期之间的关系
注意和actibity的生命周期。actibity影响着fragment的生命周期的信息。自己也对自己也是有影响的。

2.生命周期的过程。和actibvity生命周期之间的关系。
想象成vue中的子组件中的生命周期就是可以的。
activity的created对应着fragment的多个方法。连接,创建,视图绑定,activity创建。
开始。开始。
失去焦点。失去焦点。
暂停。暂停。
停止,停止
销毁。销毁视图,销毁,取消连接
其实就是开始创建和销毁的时候区别比较大。创建和销毁算是前后对应,和IO流的感觉是类似的,有创建就得有销毁的过程。

1.需要创建类
2.创建
创建的过程中是需要开启事务操作的。v4个app获取的manager的方法是有区别的。
需要开启事务和提交对应的事务。


主actibvity可以使用findViewById找到对应的控件的信息
public class MainActivity extends AppCompatActivity { Button btn=null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn=findViewById(R.id.left_btn);
btn.setOnClickListener(new View.OnClickListener() {@Override
public void onClick(View view) {//创建子定义的fragment对象
OtherFragment fragment=new OtherFragment();//创建管理者对象,只有v4的包下交这个名字
FragmentManager fragmentManager=getSupportFragmentManager();
FragmentTransaction transaction=fragmentManager.beginTransaction();//删除指定的fragment
Fragment right=fragmentManager.findFragmentById(R.id.right_f);
transaction.remove(right);
transaction.replace(R.id.right_f,fragment);//提交事务
transaction.commit();}});}
}
public class LeftFragemt extends Fragment { public LeftFragemt() {// Required empty public constructor}//本质返回的是view的对象/*
* 就是将fragment的布局添加到activity的布局上去
* */@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {return inflater.inflate(R.layout.fragment_left_fragemt, container, false);}}
1.原先的时候并没有直接的方法进行通信
建议采用的是动态的方式。不推荐使用匿名的内部类的方式。我觉得可以采用getActivity的方式进行。
2.activity中可以获取activity中的fragment的实例对象
findFragmentById可以找到Fragment的实例。

3.反之如何进行获取 getActivity进行获取


1.案例要求

2.案例分析

图1 新闻列表案例
3.目录
目录中的结构是比较重要的,结合图1 新闻列表案例进行分析

4.主布局文件代码
/*
* 主界面
* 设置要进行替换的两个fragment
* */
public class MainActivity extends AppCompatActivity {// 设置标题信息
private String titlex[]={
"标题1",
"标题2",
"标题3",};
// 设置标题对应的详细信息的内容
private String settingText[][]={
{
"标题1","标题1内容"
},
{
"标题2","标题2内容"
},
{
"标题3","标题3内容"
}
}; //获取标题的方法
public String[] getTitlex() {
return titlex;
}
//获取标题内容
public String[][] getSettingText() {
return settingText;
}// 生命周期
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//创建Fragment
//设置标题的Fragment
setTitleFragment titleFragment=new setTitleFragment();
//设置内容的Fragment
setContentFragment contentFragment=new setContentFragment();
//获取管理者对象
FragmentManager manager=getSupportFragmentManager(); //获取事务对象
FragmentTransaction transaction=manager.beginTransaction();
//替换原先布局中的内容的信息
//标题显示区域采用新的gragment进行显示
transaction.replace(R.id.settitle,titleFragment);
//内容显示区域采用新的gragment进行显示
transaction.replace(R.id.setcontent,contentFragment);
//提交事务对象
transaction.commit(); }// set方法
public void setSettingText(String[][] settingText) {
this.settingText = settingText;
}
public void setTitle(String[] titlex) {
this.titlex = titlex;
}} 主布局文件的布局文件
主布局文件的效果图

图3 主布局文件
5.设置左侧的title的列表的信息
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;/*
* 用于设置左侧的listview的内容的
* */
public class setTitleFragment extends Fragment { //相关控件的定义
private View view;//视图
private String [] title;//标题
private String[][]contents;//标题内容
private ListView listView;//显示标题的列表项 @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
} @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) { view=inflater.inflate(R.layout.title_layout, container, false);
//获取activity对象的信息
MainActivity activity=(MainActivity)getActivity();
//获取activity中的标题
title= activity.getTitlex();
//获取activity中的标题内容
contents= activity.getSettingText(); //判断view
if (view!=null){
init(); }
return view;
}
//设置ListView的方法
private void init(){
//此时的view就是对应的fragment中的界面的布局的文件
listView=view.findViewById(R.id.titlelist);
if (title!=null){
//采用的是baseAdapterd的方式进行设置数据
listView.setAdapter(new MyAdapter());
}
//listView中添加事件监听的方法
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView> adapterView, View view, int i, long l) {
//通过activity实例获取另一个Fragment对象
setContentFragment contentFragment=(setContentFragment)((MainActivity)getActivity()).getSupportFragmentManager().findFragmentById(R.id.setcontent);
//调用自定义的setText设置当前要显示的内容
/* System.out.println("此时要显示的内容");
System.out.println(contents[i][0]);
System.out.println(contents[i][1]);*/
System.out.println("此时要显示的内容");
contentFragment.setTextx(contents[i]);
}
}); }//==================采用自定义的类设置listView中要显示的数据的信息======================
class MyAdapter extends BaseAdapter{
@Override
public int getCount() {
return title.length;
} @Override
public Object getItem(int i) {
return title[i];
} @Override
public long getItemId(int i) {
return i;
} @Override
public View getView(int i, View view, ViewGroup viewGroup) {
view=View.inflate(getActivity(),R.layout.title_item_layout,null);
TextView txt=view.findViewById(R.id.titles);
txt.setText(title[i]);
return view;
}
}
}
布局文件代码

图4 展示左侧的标题的信息
子布局文件代码
6.展示标题的内容,右侧
import android.content.Context;
import android.os.Bundle;
import android.os.SystemClock;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;/*
* 显示右侧的每个标题的具体的内容的信息的
* */
public class setContentFragment extends Fragment {
TextView text1=null;
TextView text2=null;
private View view; @Override
public void onAttach(Context context) {
super.onAttach(context);
} @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//获取布局文件
view=inflater.inflate(R.layout.content_layout, container, false);
if (view!=null){
init();
}
//获取activity中设置的文字
String temp[]=((MainActivity)getActivity()).getSettingText()[0];
setTextx(temp);
return view;
} //初始化右侧要显示的内容的信息
private void init(){
text1=view.findViewById(R.id.show_title);
text2=view.findViewById(R.id.show_content);
}
//更新右侧标题对应的详细内容的界面的更新
public void setTextx(String [] text){
text1.setText(text[0]);
text2.setText(text[1]);
}
}
布局文件代码

图6 显示新闻标题以及内容的相关的信息
7.效果图

图7 采用Fragment实现的新闻列表项目
下一篇:css实现文字大小自适应