本代码使用的Android版本:android-studio-2024.2.1.11-windows
本文章使用了自定义适配器那一篇博客的知识为基础上,从而续写了之前的Wx滑动页面的信息页面,这两篇的博客链接如下:
注意:本篇文章作为续写部分代码,仅会给出补充代码和修改代码,详细的话请看模仿wx滑动主页面那一片文章。如果数据需要,可以更改代码中的部分内容,本文会在代码中提示可以更改部分,来更好的帮助读者更改代码。
目录
一、实现效果
废话不多说,先看效果图:

二、Fragment和Activity区别
1.定义:
Fragment的定义:
Fragment可以看作是一个应用用户接口或行为的一部分,它可以嵌入在Activity中,并拥有自己的布局、生命周期和用户事件处理能力。
Activity的定义:
是Android四大组件之一,代表了一个完整的用户界面。Activity通过加载布局文件来展示UI元素,并处理这些元素的交互事件。Activity之间可以进行跳转,将不同的页面串联起来,形成完整的操作流程。
2.相互关系:
Fragment依赖Activity:
Fragment必须依附于Activity存在,不能独立运行。Fragment通过getActivity方法获取它所依附的Activity实例,从而实现与Activity的通信和数据传递。
Activity管理Fragment:
Activity可以管理Fragment的生命周期,包括添加、移除、替换和回退栈管理等操作。这种管理方式使得Fragment在Activity中的使用更加灵活和高效。
三、代码:
在之前的项目中已经写完了下述代码,代码更改情况:
| 之前写过的代码段 | 修改情况 |
| NavigationFramework界面 | 修改Fragment的创建部分(框架页面) |
| TempFragmen界面 | 不改变(Fragment示例) |
| NavigationFrameworkAdapter适配器 | 不改变(该页面为框架的适配器,不要和下面这部分混淆) |
| navigation_bottom页面 | 不改变(资源) |
| tab_navigation_bottom_xxx资源 | 不改变(资源) |
1.NavigationFramework界面的修改部分:
//...前部分代码省略
//仅修改initPager部分
private void initPager() {
viewPager = findViewById(R.id.id_viewpager);
ArrayList<Fragment> fragments = new ArrayList<>();
//四个fragments添加
//修改部分---
// fragments.add(TempFragment.newInstance("微信聊天"));
fragments.add(NavigationFragmentWechat.newInstance());
//修改部分截至---
fragments.add(TempFragment.newInstance("通讯录"));
fragments.add(TempFragment.newInstance("发现"));
fragments.add(TempFragment.newInstance("我"));
NavigationFrameworkAdapter pagerAdapter = new NavigationFrameworkAdapter(getSupportFragmentManager(), getLifecycle(), fragments);
Log.d("fragment", "setAdapterBefore: ");
viewPager.setAdapter(pagerAdapter);
Log.d("fragment", "setAdapterAfter: ");
//截至适配器——————
//...后续省略
}
//...后部分代码省略
2.NavigationFragmentWechat界面:
页面代码:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".NavigationFragmentWechat">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:id="@+id/listView_friend"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="#00000000"/>
</LinearLayout>
</FrameLayout>
Java代码:
package com.example.wechattest;
import android.content.Context;
import android.os.Bundle;
import androidx.fragment.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import com.example.wechattest.AllAdapter.NavigationWechatAdapter;
import com.example.wechattest.AllHelper.DBHelper;
import com.example.wechattest.POJO.FriendTemp;
import java.util.ArrayList;
/**
* A simple {@link Fragment} subclass.
* Use the {@link NavigationFragmentWechat#newInstance} factory method to
* create an instance of this fragment.
*/
public class NavigationFragmentWechat extends Fragment {
ListView listView;
Context context;
public NavigationFragmentWechat() {
// Required empty public constructor
}
// TODO: Rename and change types and number of parameters
//新建Fragment实例
public static NavigationFragmentWechat newInstance() {
NavigationFragmentWechat fragment = new NavigationFragmentWechat();
Bundle args = new Bundle();
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
//填充视图
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
//根据Fragment来创建一个视图
View view = inflater.inflate(R.layout.fragment_navigation_wechat, container, false);
//friendArrayList这一部分是数据
//如果需要使用数据库的话,可以把数据库内容,遍历出来用ArrayList装载就可以实现数据的内容。
ArrayList<FriendTemp> friendArrayList =GetFriend();
context = getContext();
//绑定ListView
listView = view.findViewById(R.id.listView_friend);
//创建适配器和绑定适配器
NavigationWechatAdapter navigationWechatAdapter = new NavigationWechatAdapter(friendArrayList, context);
listView.setAdapter(navigationWechatAdapter);
return view;
}
//初始化FriendList,填充信息
private ArrayList<FriendTemp> GetFriend() {
ArrayList<FriendTemp> arrayList = new ArrayList<>();
FriendTemp friendTemp1 =new FriendTemp(String.valueOf(R.drawable.avatar_1),"账号1","你好","2024-12-5 00:00:00");
FriendTemp friendTemp2 =new FriendTemp(String.valueOf(R.drawable.avatar_2),"账号2","你好","2024-12-5 00:00:01");
FriendTemp friendTemp3 =new FriendTemp(String.valueOf(R.drawable.avatar_3),"账号3","你好","2024-12-5 00:00:02");
FriendTemp friendTemp4 =new FriendTemp(String.valueOf(R.drawable.avatar_1),"账号4","你好","2024-12-5 00:00:03");
arrayList.add(friendTemp1);
arrayList.add(friendTemp2);
arrayList.add(friendTemp3);
arrayList.add(friendTemp4);
return arrayList;
}
}
3.NavigationWechatAdapter适配器:
这部分没有注释代码,如果看的不太明白,请转至自定义适配器那一张,链接在本文章的顶部。同时这个适配器的部分也是存在AllAdapter包下。
package com.example.wechattest.AllAdapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.example.wechattest.POJO.FriendTemp;
import com.example.wechattest.R;
import java.util.ArrayList;
public class NavigationWechatAdapter extends BaseAdapter {
private Context mContext;
private ArrayList<FriendTemp> myFriendList;
public NavigationWechatAdapter(ArrayList<FriendTemp> myFriend, Context mContext) {
this.mContext = mContext;
this.myFriendList = myFriend;
}
@Override
public int getCount() {
return myFriendList.size();
}
@Override
public Object getItem(int position) {
return myFriendList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = LayoutInflater.from(mContext).inflate(R.layout.item_navigation_wechat, parent, false);
holder = new ViewHolder();
holder.avatar = convertView.findViewById(R.id.item_navigation_wechat_avatar);
holder.header = convertView.findViewById(R.id.item_navigation_wechat_header);
holder.recentContent = convertView.findViewById(R.id.item_navigation_wechat_recentcontent);
holder.dateTime = convertView.findViewById(R.id.item_navigation_wechat_datetime);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
FriendTemp friendTemp = myFriendList.get(position);
if (friendTemp != null) {
holder.avatar.setImageResource(Integer.parseInt(friendTemp.getAvatar()));
holder.header.setText(friendTemp.getHeader());
holder.recentContent.setText(friendTemp.getRecentContent());
holder.dateTime.setText(friendTemp.getDateTime());
} else {
// Handle the case where user is null (e.g., show placeholder text or image)
}
return convertView;
}
private static class ViewHolder {
ImageView avatar;
TextView header;
TextView recentContent;
TextView dateTime;
}
}
4. FriendTemp类(POJO)
package com.example.wechattest.POJO;
public class FriendTemp {
private String avatar;
private String header;
private String recentContent;
private String dateTime;
public String getAvatar() {
return avatar;
}
public void setAvatar(String avatar) {
this.avatar = avatar;
}
public String getHeader() {
return header;
}
public void setHeader(String header) {
this.header = header;
}
public String getRecentContent() {
return recentContent;
}
public void setRecentContent(String recentContent) {
this.recentContent = recentContent;
}
public String getDateTime() {
return dateTime;
}
public void setDateTime(String dateTime) {
this.dateTime = dateTime;
}
public FriendTemp(String avatar, String header, String recentContent, String dateTime) {
this.avatar = avatar;
this.header = header;
this.recentContent = recentContent;
this.dateTime = dateTime;
}
@Override
public String toString() {
return "FriendTemp{" +
"avatar='" + avatar + '\'' +
", header='" + header + '\'' +
", recentContent='" + recentContent + '\'' +
", dateTime='" + dateTime + '\'' +
'}';
}
}
5.item_navigation_wechat(ListView中的模板item)
<?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">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp">
<LinearLayout
android:layout_width="55dp"
android:layout_height="55dp"
android:layout_margin="10dp">
<androidx.cardview.widget.CardView
android:id="@+id/cv_user_head"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
app:cardCornerRadius="7dp"
app:cardElevation="10dp"
app:cardPreventCornerOverlap="true">
<ImageView
android:id="@+id/item_navigation_wechat_avatar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:padding="0dp"
android:scaleType="centerCrop"
app:srcCompat="@drawable/avatar_1" />
</androidx.cardview.widget.CardView>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="10dp"
android:layout_weight="1"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="horizontal">
<TextView
android:id="@+id/item_navigation_wechat_header"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="名字"
android:textColor="@color/black"
android:textSize="19dp" />
<TextView
android:id="@+id/item_navigation_wechat_datetime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1"
android:gravity="right"
android:text="晚上6:00"
android:textColor="@color/gray"
android:textSize="12dp"
tools:ignore="TextSizeCheck" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1">
<TextView
android:id="@+id/item_navigation_wechat_recentcontent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="很高兴认识你"
android:textColor="@color/gray"
android:textSize="14dp"
tools:ignore="TextSizeCheck" />
</LinearLayout>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="0.75dp"
android:background="@color/gray" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
四、结语
本篇文章主要是续写wx页面的部分,制作不易,觉得实用的就点个收藏吧!

被折叠的 条评论
为什么被折叠?



