栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Android智慧城市——首页显示轮播、新闻

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android智慧城市——首页显示轮播、新闻

首页显示的有一个轮播图、两个专题新闻、一个新闻类目、一个新闻列表。数据请求其实都是一样的。

java:

package com.example.myapplication.fragment;

import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.os.Bundle;

import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;

import android.os.Handler;
import android.os.Looper;
import android.text.Html;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.baseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;

import com.bumptech.glide.Glide;
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.bumptech.glide.request.RequestOptions;
import com.example.myapplication.R;
import com.example.myapplication.adapterAndbase.Const;
import com.example.myapplication.basedata.Connent;
import com.example.myapplication.bean.NewsBean;
import com.example.myapplication.beansdata.BannerData;
import com.example.myapplication.beansdata.NewsClassData;
import com.example.myapplication.beansdata.NewsData;
import com.example.myapplication.view.NewsInfoActivity;
import com.example.myapplication.view.NewsListActivity;
import com.google.gson.Gson;
import com.youth.banner.Banner;
import com.youth.banner.loader.ImageLoader;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public class HomeFragment extends Fragment {

    private View view;
    //轮播图
    private Banner banner;
    private ArrayList banner_imgs = new ArrayList<>();
    //专题热点新闻及新闻分类
    private ImageView img_right_home, img_left_home;
    private ImageView[] fea_imgs = {img_right_home, img_left_home};
    private TextView news1, news2, news3, news4, news5, news6, right_text_home, left_text_home;
    private TextView[] news_name = {news1, news2, news3, news4, news5, news6};//对分类的textview进行封装集合
    private TextView[] fea_texts = {left_text_home, right_text_home};//对专题中的textview进行封装集合
    private int[] news_id = {R.id.t1, R.id.t2, R.id.t3, R.id.t4, R.id.t5, R.id.t6};//将分类的textview对应id进行封装
    private int[] imgs_id = {R.id.home_left_img, R.id.home_right_img};//将专题中的的imageview对应id进行封装
    private int[] contents_id = {R.id.home_left_text, R.id.home_right_text};//将专题中的textview对应id进行封装
    //左右linearlayout定义并封装
    private LinearLayout layout_list, layout_right_home, layout_left_home;
    private LinearLayout[] fea_layouts = {layout_left_home, layout_right_home};//对专题中的linearlayout进行封装集合
    private int[] layouts_id = {R.id.home_right_news, R.id.home_left_news};//将分类的linearlayout对应id进行封装,后续设置点击事件时使用
    //listview
    private ListView listView;
    //集合暂存专题图片与内容
    ArrayList imgs = new ArrayList<>();
    ArrayList contents = new ArrayList<>();
    ArrayList titles = new ArrayList<>();

    private NewsData newsData;

    List alldata = new ArrayList<>();
    List classdata = new ArrayList<>();
    List newInfodata = new ArrayList<>();

    OkHttpClient okHttpClient;
    Handler handler;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        view = inflater.inflate(R.layout.fragment_home, container, false);
        okHttpClient = new OkHttpClient.Builder().build();
        handler = new Handler(Looper.getMainLooper());

        bindId();
        initViewBanner();//Banner轮播图
        getNewsData();
        return view;
    }

    private void bindId() {
        banner = view.findViewById(R.id.home_banner);
        listView = view.findViewById(R.id.list);
        layout_list = view.findViewById(R.id.list_linear);
//        news0 = view.findViewById(R.id.t0);
        for (int i = 0; i < news_id.length; i++) {
            news_name[i] = view.findViewById(news_id[i]);
        }
        for (int i = 0; i < imgs_id.length; i++) {
            fea_imgs[i] = view.findViewById(imgs_id[i]);
            fea_texts[i] = view.findViewById(contents_id[i]);
            fea_layouts[i] = view.findViewById(layouts_id[i]);
        }
    }

    private void initViewBanner() {
        Request request = new Request.Builder()
                .url(Connent.ipAddress + Connent.bannerAddress)
                .build();
        Call call = okHttpClient.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(@NonNull Call call, @NonNull IOException e) {
            }

            @Override
            public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
                final String data_banner = response.body().string();
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        BannerData bannerData = new Gson().fromJson(data_banner, BannerData.class);
                        for (int i = 0; i < bannerData.getRows().size(); i++) {
                            banner_imgs.add(Connent.ipAddress + bannerData.getRows().get(i).getAdvImg());
                        }
                        banner.setImages(banner_imgs)
                                .isAutoPlay(true)
                                .setDelayTime(3000)
                                .setImageLoader(new ImageLoader() {
                                    @Override
                                    public void displayImage(Context context, Object path, ImageView imageView) {
                                        Glide.with(context)
                                                .load(path)
                                                .into(imageView);
                                    }
                                }).start();
                    }
                });
            }
        });
    }


    private void getNewsData() {
        Request request = new Request.Builder()
                .url(Connent.ipAddress + Connent.newsContentAddress)
                .build();
        Call call = okHttpClient.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(@NonNull Call call, @NonNull IOException e) {

            }

            @Override
            public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
                final String data = response.body().string();
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        if (response != null && response.isSuccessful()) {
                            newsData = new Gson().fromJson(data, NewsData.class);
                            //专题热点新闻
                            for (int i = 0; i < newsData.getRows().size(); i++) {
                                newInfodata.clear();
                                if (newsData.getRows().get(i).getHot().equals("Y")) {
                                    imgs.add(Connent.ipAddress + newsData.getRows().get(i).getCover());
                                    contents.add(String.valueOf(Html.fromHtml(newsData.getRows().get(i).getContent())));
                                    titles.add(String.valueOf(Html.fromHtml(newsData.getRows().get(i).getTitle())));
                                    newInfodata.add(newsData.getRows().get(i));
                                }
                            }

                            for (int i = 0; i < fea_imgs.length; i++) {
                                Glide.with(getActivity())
                                        .load(imgs.get(i))
                                        .into(fea_imgs[i]);
                                fea_texts[i].setText(contents.get(i));

                                int finalI = i;
                                fea_layouts[i].setonClickListener(new View.onClickListener() {
                                    @Override
                                    public void onClick(View v) {
                                        for (int i = 0; i < fea_layouts.length; i++) {
                                            if (finalI != i) {
                                                Const.NewsBean = newInfodata.get(i);
                                                startActivity(new Intent(getActivity(), NewsInfoActivity.class));
                                            }
                                        }
                                    }
                                });
                            }

                            alldata.clear();
                            for (int i = 0; i < newsData.getRows().size(); i++) {
                                alldata.add(newsData.getRows().get(i));
                            }
                            initViewClass();
                        }

                    }
                });
            }
        });

    }

    private void initViewClass() {
        Request request = new Request.Builder()
                .url(Connent.ipAddress + Connent.newsClassAddress)
                .build();
        Call call = okHttpClient.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(@NonNull Call call, @NonNull IOException e) {

            }

            @Override
            public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
                final String data = response.body().string();
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        NewsClassData newsClassData = new Gson().fromJson(data, NewsClassData.class);
                        for (int i = 0; i < newsClassData.getData().size(); i++) {
                            news_name[i].setText(newsClassData.getData().get(i).getName());
                            if (i == 0) {
                                classdata.clear();
                                for (int j = 0; j < alldata.size(); j++) {
                                    if (alldata.get(j).getType().equals(String.valueOf(newsClassData.getData().get(0).getId()))) {
                                        classdata.add(alldata.get(j));
                                    }
                                }
                            }
                            final int finalI = i;
                            if (finalI == 0) {
                                classdata.clear();
                                for (int j = 0; j < alldata.size() - 1; j++) {
                                    if (alldata.get(j).getType() != null) {
                                        if (alldata.get(j).getType().equals(String.valueOf(newsClassData.getData().get(0).getId()))) {
                                            classdata.add(alldata.get(j));
                                        }
                                    }
                                    for (int a = 0; a < news_name.length; a++) {
                                        if (finalI == a) {
                                            news_name[a].setTextColor(Color.RED);
                                        } else {
                                            news_name[a].setTextColor(Color.BLACK);
                                        }
                                    }

                                }
                                PutListView(classdata);
                            }
                            news_name[i].setonClickListener(new View.onClickListener() {
                                @Override
                                public void onClick(View v) {
                                    classdata.clear();
                                    for (int j = 0; j < alldata.size() - 1; j++) {
                                        if (alldata.get(j).getType() != null) {
                                            if (alldata.get(j).getType().equals(String.valueOf(newsClassData.getData().get(finalI).getId()))) {
                                                classdata.add(alldata.get(j));
                                            }
                                        }
                                        for (int a = 0; a < news_name.length; a++) {
                                            if (finalI == a) {
                                                news_name[a].setTextColor(Color.RED);
                                            } else {
                                                news_name[a].setTextColor(Color.BLACK);
                                            }
                                        }

                                    }
                                    PutListView(classdata);
                                }
                            });
                        }
                    }
                });
            }
        });
    }

    private void PutListView(List newsBeanList) {

        listView.setAdapter(new NewsAdapter(newsBeanList));

        listView.setonItemClickListener(new AdapterView.onItemClickListener() {
            @Override
            public void onItemClick(AdapterView parent, View view, int position, long id) {
                Const.ClassBean = classdata.get(position);
                Bundle bundle = new Bundle();
                bundle.putInt("sort", position);
                Intent intent = new Intent(getActivity(), NewsListActivity.class);
                intent.putExtras(bundle);
                startActivity(intent);
            }
        });
        ListHeight(newsBeanList);
    }

    private class NewsAdapter extends baseAdapter {

        List list;

        public NewsAdapter(List list) {
            this.list = list;
        }

        @Override
        public int getCount() {
            return list.size();
        }

        @Override
        public Object getItem(int position) {
            return list.get(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View view_news = View.inflate(getActivity(), R.layout.activity_home_news, null);
            ImageView img = view_news.findViewById(R.id.lst_image);
            TextView title = view_news.findViewById(R.id.list_title);
            TextView content = view_news.findViewById(R.id.list_content);
            TextView time = view_news.findViewById(R.id.list_time);
            TextView comments = view_news.findViewById(R.id.list_commentNum);
            TextView likes = view_news.findViewById(R.id.list_likeNum);
            TextView reads = view_news.findViewById(R.id.list_readNum);
            Glide.with(getActivity()).load(Connent.ipAddress + classdata.get(position).getCover()).into(img);
            title.setText(classdata.get(position).getTitle());
            content.setText(Html.fromHtml(classdata.get(position).getContent()));
            time.setText("时间:" + classdata.get(position).getUpdateTime());
            comments.setText("评论:" + classdata.get(position).getCommentNum());
            likes.setText("点赞:" + classdata.get(position).getLikeNum());
            reads.setText("阅读:" + classdata.get(position).getReadNum());
            return view_news;
        }
    }

    private void ListHeight(List newsBeanList) {
        NewsAdapter newsAdapter = new NewsAdapter(newsBeanList);
        if (newsAdapter == null) {
            return;
        }
        int listHeight = 0;
        for (int i = 0; i < newsAdapter.getCount(); i++) {
            View listItem = newsAdapter.getView(i, null, listView);
            listItem.measure(0, 0);
            listHeight += listItem.getMeasuredHeight();
        }
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(layout_list.getLayoutParams());
        params.height = listHeight + (listView.getDividerHeight() * (newsAdapter.getCount() - 1));
        listView.setLayoutParams(params);
    }
}

xml:




    

        

            

            


            

                

                

                    

                        

                        
                    

                    

                        

                        
                    

                

            

            

                

                    

                    

                    

                    

                    

                    

                    

                    

                    

                    

                    

                
            

            

            

                
            

        
    

需要用到的Bean文件:

根据自己需求不同,写不同的东西

新闻全部信息Bean:

package com.example.myapplication.bean;


public class NewsBean {

    String title;
    String cover;
    String content;
    String type;
    int likeNum;
    int readNum;
    String updateTime;
    int commentNum;
    String hot;

    public String getHot() {
        return hot;
    }

    public void setHot(String hot) {
        this.hot = hot;
    }

    public int getCommentNum() {
        return commentNum;
    }

    public void setCommentNum(int commentNum) {
        this.commentNum = commentNum;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getCover() {
        return cover;
    }

    public void setCover(String cover) {
        this.cover = cover;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public int getLikeNum() {
        return likeNum;
    }

    public void setLikeNum(int likeNum) {
        this.likeNum = likeNum;
    }

    public int getReadNum() {
        return readNum;
    }

    public void setReadNum(int readNum) {
        this.readNum = readNum;
    }

    public String getUpdateTime() {
        return updateTime;
    }

    public void setUpdateTime(String updateTime) {
        this.updateTime = updateTime;
    }
}

请求新闻全部信息返回的数据:

上面多行注释的就是返回的信息

package com.example.myapplication.beansdata;



import com.example.myapplication.bean.NewsBean;

import java.util.List;

public class NewsData {

    private int total;
    private List rows;
    private int code;
    private String msg;

    public int getTotal() {
        return total;
    }

    public void setTotal(int total) {
        this.total = total;
    }

    public List getRows() {
        return rows;
    }

    public void setRows(List rows) {
        this.rows = rows;
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }
}

新闻类目信息:

根据需求来写,因为我只需要id和name所以就只保留了这两个,名义一定要对应服务器上面的名字,上面的都一样

package com.example.myapplication.bean;

public class NewsClassBean {

    int id;
    String name;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

新闻类目返回信息:

package com.example.myapplication.beansdata;

import com.example.myapplication.bean.NewsClassBean;

import java.util.List;

public class NewsClassData {

    String msg;
    int code;
    List data;

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public List getData() {
        return data;
    }

    public void setData(List data) {
        this.data = data;
    }
}

还有一个banner轮播图的信息:

package com.example.myapplication.bean;

public class BannerBean {

    String advImg;

    public void setAdvImg(String advImg) {
        this.advImg = advImg;
    }

    public String getAdvImg() {
        return advImg;
    }
}

banner轮播图返回信息:

package com.example.myapplication.beansdata;

import com.example.myapplication.bean.BannerBean;

import java.util.List;

public class BannerData {

    int total;
    List rows;
    int code;
    String msg;

    public int getTotal() {
        return total;
    }

    public void setTotal(int total) {
        this.total = total;
    }

    public List getRows() {
        return rows;
    }

    public void setRows(List rows) {
        this.rows = rows;
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }
}

以上就是智慧城市首页的东西了,bean文件一定要根据要求写,而且必须与服务器中的名字相对应,有些智慧城市需要写推荐服务,因为我写的没有,所以就没写,以后遇见的话再写吧(应该是不会遇见了哈哈哈!!!);

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/667279.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号