# android_s **Repository Path**: aparece/android_s ## Basic Information - **Project Name**: android_s - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-10-15 - **Last Updated**: 2023-10-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 目的 1. 请根据课程内容设计一个app的门户框架,需要实现3-4个tab切换效果;本功能要求需要的技术为:activity、xml、fragment 2. 在任一tab页中实现列表效果;本功能的实现需要使用recycleview; # 过程 1. 分别实现各个界面的UI 2. 使用fragment实现各界面跳转 3. 使用recycleview实现列表 ## 1. 实现UI ### 1.1. 实现主界面UI #### 1.1.1. 设计顶部 - 建立一个textview将其设置为文本居中,字体大小设置为40sp ##### 1.1.1.1. 代码 - top.xml ```xml ``` ##### 1.1.1.2. 界面 ![顶部](./pic/1.png) #### 1.1.2. 设置底部按键 - 在linearlayout中创建四个横向的linearlayout,在创建的linearlayout中创建图片和文本 - 将图片放入drawable文件夹中 - 插入图片,设置图片路径,设置字体大小,文字居中,文本内容等 - 将四个linearlayout的宽度比重设置为1,使其均分屏幕宽度 ##### 1.1.2.1. 代码 - button.xml ```xml ``` ##### 1.1.2.2. 界面 ![底部按键](./pic/2.png) #### 1.1.3. 合并为主界面 - 使用include导入top和button ##### 1.1.3.1. 代码 - activity_recycle_view.xml ```xml ``` ##### 1.1.3.2. 界面 ![主界面](./pic/3.png) ## 2. 使用fragment实现界面跳转 ### 2.1. 设计跳转界面UI - 设计四个界面,其中分别显示聊天,通讯录,发现,我 #### 2.1.1. 代码 - layout1.xml ```java ``` #### 2.1.2. 界面 ![聊天界面](./pic/4.png) ### 2.2.设计点击效果 - 实现 View.OnClickListener 接口 - 为每个 LinearLayout 元素设置点击事件监听器,通过 setOnClickListener(this) 将当前的 MainActivity 实例设置为监听器。 - 实现onClick,执行时显示某一界面 #### 2.2.1. 代码 - MainActivity.java ```java LinearLayout lo1,lo2,lo3,lo4; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //列表 lo1 = findViewById(R.id.Lo1); lo2 = findViewById(R.id.Lo2); lo3 = findViewById(R.id.Lo3); lo4 = findViewById(R.id.Lo4); initialfragment(); lo1.setOnClickListener(this); //将当前的 Activity(或 Fragment)实例设置为 lo1 的点击事件监听器 lo2.setOnClickListener(this); lo3.setOnClickListener(this); lo4.setOnClickListener(this); } @Override public void onClick(View view) { if(view.getId()==R.id.Lo1) show(1); if(view.getId()==R.id.Lo2) show(2); if(view.getId()==R.id.Lo3) show(3); if(view.getId()==R.id.Lo4) show(4); } ``` ### 2.3. 实现各个界面的切换 - 隐藏所有界面,切到到某一界面时隐藏其他界面,只显示当前界面 - initialfragment初始化,显示四个子界面并隐藏,初始默认显示界面1 - show显示给出的界面 - hide隐藏给出的界面 #### 2.3.1. 代码 - MainActivity.java ```java private void show(int i) {//显示给出的界面 FragmentTransaction transaction = fm.beginTransaction(); Hide(transaction); switch (i){ case 1:transaction.show(fragment1);break; case 2:transaction.show(fragment2);break; case 3:transaction.show(fragment3);break; case 4:transaction.show(fragment4);break; default:break; } transaction.commit(); } public void initialfragment(){//初始化,显示四个子界面并隐藏,初始默认显示界面1 FragmentTransaction ft= fm.beginTransaction() //重启事件 .add(androidx.appcompat.R.id.content,fragment1) .add(androidx.appcompat.R.id.content,fragment2) .add(androidx.appcompat.R.id.content,fragment3) .add(androidx.appcompat.R.id.content,fragment4) .hide(fragment1) .hide(fragment2) .hide(fragment3) .hide(fragment4) .show(fragment1); ft.commit(); } private void Hide(FragmentTransaction ft) {//将界面隐藏 ft.hide(fragment1) .hide(fragment2) .hide(fragment3) .hide(fragment4); } ``` ### 2.4. 将xml转换为view对象 - inflater.inflate用于将 XML 文件中定义的布局转换为对应的 View 对象 - fragment.java ```java public class Fragment1 extends Fragment{ @Override public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState){ return inflater.inflate(R.layout.layout1,container,false); } } ``` ## 3. 使用recycleview实现列表 ### 3.1. 列表界面 #### 3.1.1. 代码 - activity_recycle_view.xml ```xml ``` #### 3.1.2. 界面 ![列表](./pic/5.png) ### 3.2. 列表元素布局 #### 3.1.1. 代码 - item.xml ```xml ``` #### 3.1.2. 界面 ![列表元素](./pic/6.png) ### 3.2. 写适配器 - onCreateViewHolder() 方法用于创建并返回一个 Myholder 对象。 - onBindViewHolder() 将数据绑定到 ViewHolder 上。使用list中的每个值给Myholder赋值。 - getItemCount确定 RecyclerView 中的列表项数量。 #### 3.2.1. 代码 - Myadapter.java ```java public Myadapter(Context context,List list){ context1=context; list1=list; } @NonNull @Override public Myholder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view= LayoutInflater.from(context1).inflate(R.layout.item,parent,false); Myholder holder=new Myholder(view); return holder; } @Override public void onBindViewHolder(@NonNull Myholder holder, int position) { holder.textview.setText(list1.get(position)); } @Override public int getItemCount() { return list1.size(); } public class Myholder extends RecyclerView.ViewHolder { TextView textview; public Myholder(@NonNull View itemView) { super(itemView); textview=itemView.findViewById(R.id.textView8); } } ``` ### 3.3. 写RecycleViewActivity 类 - 创建一个 RecyclerView 对象,然后通过 for 循环遍历 0 到 8 这 9 个数字,将 "这是第" + i + "行" 添加到数据集合中。 - 创建了一个 Myadapter 对象,通过调用 setAdapter() 方法将该适配器绑定到 RecyclerView 上。 - 变量 context 在适配器中使用,因此需要以成员变量的形式保存在该类中。 #### 3.4. 代码 - RecycleViewActivity.java ```java public class RecycleViewActivity extends AppCompatActivity { RecyclerView recycleview; Myadapter adapter; Context context; List list; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_recycle_view); recycleview=findViewById(R.id.RecyclerView1); list=new ArrayList<>(); for(int i=0;i<9;i++){ list.add("这是第"+i+"行"); } context=this; adapter =new Myadapter(this,list); recycleview.setAdapter(adapter); LinearLayoutManager manager=new LinearLayoutManager(this); manager.setOrientation(RecyclerView.VERTICAL); recycleview.setLayoutManager(manager); } } ``` ### 3.5. 测试 - 在注册文件AndroidManifest.xml中将初始界面由MainActivity换为RecycleViewActivity.java #### 3.5.1. 代码 - AndroidManifest.xml ```xml ``` #### 3.5.2. 运行结果 ![列表运行结果](./pic/7.png) ## 4. 将RecycleViewActivity合并进fragment - RecycleViewActivity是独立的界面,如果直接使用startActivity使用RecycleViewActivity会导致该界面完全覆盖之前的MainActivity界面,导致底部按钮以及顶部无法显示,需要使用startactivityforresult,但该方法已经被删除了,因此直接将RecycleViewActivity的代码直接合并到fragment中。 - 因为当前类为fragment,因此传值不能传this而是直接传context ### 4.1. 代码 - fragment2.java ```java public class Fragment2 extends Fragment { RecyclerView recycleview; Myadapter adapter; Context context; List list; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view=inflater.inflate(R.layout.activity_recycle_view,container,false); recycleview=view.findViewById(R.id.RecyclerView1); context=view.getContext(); list=new ArrayList<>(); for(int i=0;i<9;i++){ list.add("这是第"+i+"行"); } adapter =new Myadapter(context,list); recycleview.setAdapter(adapter); LinearLayoutManager manager=new LinearLayoutManager(context); manager.setOrientation(RecyclerView.VERTICAL); recycleview.setLayoutManager(manager); return view; } } ``` # 结果 ![运行界面1](./pic/8.png) ![运行界面2](./pic/9.png) ![运行界面3](./pic/10.png) ![运行界面4](./pic/11.png) # 仓库 [gitee](https://gitee.com/aparece/android_s)