Android中在Fragment中使用ListView模仿wx信息信息,附带代码实现、框架模板-续

         本代码使用的Android版本:android-studio-2024.2.1.11-windows

本文章使用了自定义适配器那一篇博客的知识为基础上,从而续写了之前的Wx滑动页面的信息页面,这两篇的博客链接如下:

Android中使用自定义适配器完成对ListView的使用方法,附带可修改模板icon-default.png?t=O83Ahttps://blog.youkuaiyun.com/rawmeat/article/details/144251368?spm=1001.2014.3001.5501

Android中使用fragment+viewPager模仿wx滑动主页面,附带代码实现、框架模板icon-default.png?t=O83Ahttps://blog.youkuaiyun.com/rawmeat/article/details/144243729?spm=1001.2014.3001.5501

        注意:本篇文章作为续写部分代码,仅会给出补充代码和修改代码,详细的话请看模仿wx滑动主页面那一片文章。如果数据需要,可以更改代码中的部分内容,本文会在代码中提示可以更改部分,来更好的帮助读者更改代码。

目录

一、实现效果

二、Fragment和Activity区别

        1.定义:

        2.相互关系:

三、代码:

1.NavigationFramework界面的修改部分:

2.NavigationFragmentWechat界面:

3.NavigationWechatAdapter适配器:

4. FriendTemp类(POJO)

5.item_navigation_wechat(ListView中的模板item)

四、结语


一、实现效果

        废话不多说,先看效果图:

二、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页面的部分,制作不易,觉得实用的就点个收藏吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值