package com.example.lianxi.Fragment;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
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 androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import com.bumptech.glide.Glide;
import com.example.lianxi.BaseInfo.Connect;
import com.example.lianxi.LeftNews;
import com.example.lianxi.ListNews.Const;
import com.example.lianxi.LunBoData.LunboData;
import com.example.lianxi.ListNews.NewsData.NewsBean;
import com.example.lianxi.ListNews.NewsData.NewsData;
import com.example.lianxi.NewsListDetails;
import com.example.lianxi.R;
import com.example.lianxi.ListNews.TabData.TabData;
import com.example.lianxi.RightNews;
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 {
Banner banner;
OkHttpClient okHttpClient;
Handler handler;
//轮播图图片集合
List<String> imagelist = new ArrayList<>();
//专题新闻文本
LinearLayout left_news,right_news;
TextView left_text,right_text;
TextView [] arr_lrtext = {left_text,right_text};
int []arr_lrtextid = {R.id.left_text,R.id.rigth_text};
ImageView left_img,right_img;
ImageView [] arr_lrimage = {left_img,right_img};
int [] arr_lrimageid = {R.id.left_image,R.id.right_img};
//新闻导航栏文本
TextView t1,t2,t3,t4,t5,t6;
TextView [] arr_text = {t1,t2,t3,t4,t5,t6};
int [] text_id = {R.id.t1,R.id.t2,R.id.t3,R.id.t4,R.id.t5,R.id.t6};
//创建两个集合,一个用来装载所有数据,一个用来装载新闻分类数据
List<NewsBean> alldata = new ArrayList<>();
List<NewsBean> fenleidata = new ArrayList<>();
//所有新闻数据原始数据
NewsData newsData;
//推荐服务分类集合
List<ServiceBean> allservice = new ArrayList<>();
List<ServiceBean> fenleiservice = new ArrayList<>();
//推荐服务文本及图片
ImageView simg1,simg2,simg3,simg4,simg5,simg6,simg7,simg8,simg9,simg10;
ImageView [] arr_simg = {simg1,simg2,simg3,simg4,simg5,simg6,simg7,simg8,simg9,simg10};
int []arr_simgid = {R.id.img1,R.id.img2,R.id.img3,R.id.img4,R.id.img5,R.id.img6,R.id.img7,R.id.img8,R.id.img9,R.id.img10};
TextView st1,st2,st3,st4,st5,st6,st7,st8,st9,st10;
TextView[] arr_st = {st1,st2,st3,st4,st5,st6,st7,st8,st9,st10};
int[] arr_stid = {R.id.te1,R.id.te2,R.id.te3,R.id.te4,R.id.te5,R.id.te6,R.id.te7,R.id.te8,R.id.te9,R.id.te10};
//列表项
ListView listView;
//包裹listview的布局
LinearLayout list_linear;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.home_fragment,container,false);
okHttpClient = new OkHttpClient.Builder().build();
handler = new Handler(Looper.getMainLooper());
banner = view.findViewById(R.id.banner);
//服务图片与文本
for (int i=0;i<arr_simg.length;i++){
arr_simg[i] = view.findViewById(arr_simgid[i]);
arr_st[i] = view.findViewById(arr_stid[i]);
}
//主页面跳转全部服务
arr_simg[9].setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
((MainActivity) getActivity()).select(1);
}
});
//初始化专题文本
left_news = view.findViewById(R.id.left_layout);
right_news = view.findViewById(R.id.right_layout);
for (int i=0;i<arr_lrtextid.length;i++){
arr_lrtext[i] = view.findViewById(arr_lrtextid[i]);
arr_lrimage[i] = view.findViewById(arr_lrimageid[i]);
}
//初始化导航栏文本
for (int i=0;i<arr_text.length;i++){
arr_text[i] = view.findViewById(text_id[i]);
}
listView = view.findViewById(R.id.list);
list_linear = view.findViewById(R.id.list_linear);//初始化包裹列表的布局
showBanner();
ShowMainService();
showMoreNews();
return view;
}
private void ShowMainService() {
Request request = new Request.Builder()
.url(Connect.allservice)
.build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
final String data = response.body().string();
handler.post(new Runnable() {
@Override
public void run() {
allservice.clear();
ServiceData serviceData = new Gson().fromJson(data,ServiceData.class);
for (int i=0;i<serviceData.getRows().size();i++){
allservice.add(serviceData.getRows().get(i));
}
Comparator<ServiceBean> comparator = new Comparator<ServiceBean>() {
@Override
public int compare(ServiceBean serviceBean, ServiceBean t1) {
if (serviceBean.getId() != t1.getId()) {
return t1.getId() - serviceBean.getId();
} else {
return t1.getId()-serviceBean.getId();
}
}
};
Collections.sort(allservice,comparator);
fenleiservice.clear();
for (int i=0;i<9;i++){
fenleiservice.add(allservice.get(i));
arr_st[i].setText(fenleiservice.get(i).getServiceName());
Glide.with(getActivity()).load(Connect.head+fenleiservice.get(i).getImgUrl()).into(arr_simg[i]);
}
}
});
}
});
}
//获取专题新闻
private void showSpicalNews() {
//热点专题图片与内容的集合
ArrayList<String> special_img = new ArrayList<>();
ArrayList<String> special_text = new ArrayList<>();
ArrayList<String> spccail_title = new ArrayList<>();
for (int i=0;i<newsData.getRows().size();i++){
if (newsData.getRows().get(i).getHot().equals("Y")){
spccail_title.add(newsData.getRows().get(i).getTitle());
special_img.add(Connect.head +newsData.getRows().get(i).getCover());
special_text.add(newsData.getRows().get(i).getContent());
}
}
Const.SpecailNewsTitle = spccail_title;
Const.SpecailNewsText = special_text;
Const.SpecailNewsImage = special_img;
//加载主页面专题新闻图片与标题
for (int i=0;i<special_img.size();i++){
Glide.with(getActivity())
.load(special_img.get(i))
.into(arr_lrimage[i]);
arr_lrtext[i].setText(Html.fromHtml(special_text.get(i)));
}
//点击跳转到左侧详细新闻界面
left_news.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(getActivity(),LeftNews.class));
}
});
//点击跳转到右侧详细新闻界面
right_news.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(getActivity(), RightNews.class));
}
});
}
//获取全部新闻
private void showMoreNews() {
Request request = new Request.Builder()
.url(Connect.Allnews)
.build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
final String data = response.body().string();
handler.post(new Runnable() {
@Override
public void run() {
newsData = new Gson().fromJson(data,NewsData.class);
alldata.clear();
//将所有数据装载到集合alldata中
for (int i=0;i<newsData.getRows().size();i++){
alldata.add(newsData.getRows().get(i));
}
//第一次进入开始加载的列表新闻
showNewsTab();
showSpicalNews();
}
});
}
});
}
//获取新闻导航栏文字
private void showNewsTab() {
Request request = new Request.Builder()
.url(Connect.TabnewsText)
.build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
final String data = response.body().string();
handler.post(new Runnable() {
@Override
public void run() {
TabData tabData = new Gson().fromJson(data,TabData.class);
for (int i=0;i<tabData.getData().size();i++){
arr_text[i].setText(tabData.getData().get(i).getName());
if (i==0){
fenleidata.clear();
for (int j=0;j<alldata.size();j++){
//获取的导航栏文本不为空,并且将导航栏文本Type与id相同时,证明是同一组数据,将其放在分类集合中
if (alldata.get(j).getType()!=null&&alldata.get(j).getType().equals(String.valueOf(tabData.getData().get(0).getId()))){
fenleidata.add(alldata.get(j));
}
}
Putlistview(fenleidata);
}
final int finall=i;
//给导航栏设置监听
arr_text[i].setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
fenleidata.clear();
for(int j=0;j<alldata.size()-1;j++){
if (alldata.get(j).getType()!=null){
if (alldata.get(j).getType().equals(String.valueOf(tabData.getData().get(finall).getId()))){
fenleidata.add(alldata.get(j));
}
}
//列表项点击变色
for (int a=0;a<text_id.length;a++){
if (finall==a){
arr_text[a].setTextColor(Color.WHITE);
arr_text[a].setBackgroundResource(R.color.blue);
}
else {
arr_text[a].setTextColor(Color.BLACK);
arr_text[a].setBackgroundResource(R.color.white);
}
}
}
Putlistview(fenleidata);
}
});
}
}
});
}
});
}
//处理列表项
private void Putlistview(List<NewsBean> newsBeanList) {
listView.setAdapter(new MyAdapter(newsBeanList));
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
//点击列表项跳转到新闻详情界面
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Const.NewsDetail = fenleidata.get(position);
startActivity(new Intent(getActivity(), NewsListDetails.class));
}
});
ListHeight(newsBeanList);
}
//列表适配器
private class MyAdapter extends BaseAdapter {
List<NewsBean> list;
public MyAdapter(List<NewsBean> 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 = View.inflate(getActivity(), R.layout.homenews_list, null);
ImageView img = view.findViewById(R.id.lst_image);
TextView title = view.findViewById(R.id.lst_title);
TextView time = view.findViewById(R.id.lst_sj);
TextView pingluns = view.findViewById(R.id.lst_pls);
Glide.with(getActivity()).load(Connect.head+ fenleidata.get(position).getCover()).into(img);
title.setText(fenleidata.get(position).getTitle());
time.setText(fenleidata.get(position).getCreateTime());
pingluns.setText("评论数:" + fenleidata.get(position).getCommentNum());
return view;
}
}
private void ListHeight(List<NewsBean> newsBeanList) {
MyAdapter myadpter = new MyAdapter(newsBeanList);
if (myadpter == null) {
return;
}
int listHeight = 0;
for (int i = 0; i < myadpter.getCount(); i++) {
View listItem = myadpter.getView(i, null, listView);
listItem.measure(0, 0);
listHeight += listItem.getMeasuredHeight();
}
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(list_linear.getLayoutParams());
params.height = listHeight + (listView.getDividerHeight() * (myadpter.getCount() - 1))+10;
listView.setLayoutParams(params);
}
//获取轮播图数据
private void showBanner() {
Request request = new Request.Builder()
.url(Connect.Lunbo)
.build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
final String data = response.body().string();
handler.post(new Runnable() {
@Override
public void run() {
LunboData lunboData = new Gson().fromJson(data,LunboData.class);
imagelist.clear();
for (int i=0;i<lunboData.getRows().size();i++){
imagelist.add(Connect.head+lunboData.getRows().get(i).getAdvImg());
}
banner.setImages(imagelist)
.setDelayTime(2000)
.setImageLoader(new ImageLoader() {
@Override
public void displayImage(Context context, Object path, ImageView imageView) {
Glide.with(context)
.load(path)
.into(imageView);
}
}).start();
}
});
}
});
}
}
布局部分:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ScrollView
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.youth.banner.Banner
android:layout_width="match_parent"
android:layout_height="200dp"
android:id="@+id/banner"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="推荐服务"
android:background="@color/blue"/>
//推荐服务
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_weight="1"
android:layout_gravity="center"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/img1"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_gravity="center"/>
<TextView
android:id="@+id/te1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="智慧巴士"
android:layout_gravity="center"/>
</LinearLayout>
<LinearLayout
android:layout_weight="1"
android:layout_gravity="center"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/img2"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_gravity="center"/>
<TextView
android:id="@+id/te2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="智慧巴士"
android:layout_gravity="center"/>
</LinearLayout>
<LinearLayout
android:layout_weight="1"
android:layout_gravity="center"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/img3"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_gravity="center"/>
<TextView
android:id="@+id/te3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="智慧巴士"
android:layout_gravity="center"/>
</LinearLayout>
<LinearLayout
android:layout_weight="1"
android:layout_gravity="center"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/img4"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_gravity="center"/>
<TextView
android:id="@+id/te4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="智慧巴士"
android:layout_gravity="center"/>
</LinearLayout>
<LinearLayout
android:layout_weight="1"
android:layout_gravity="center"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/img5"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_gravity="center"/>
<TextView
android:id="@+id/te5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="智慧巴士"
android:layout_gravity="center"/>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_weight="1"
android:layout_gravity="center"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/img6"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_gravity="center"/>
<TextView
android:id="@+id/te6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="智慧巴士"
android:layout_gravity="center"/>
</LinearLayout>
<LinearLayout
android:layout_weight="1"
android:layout_gravity="center"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/img7"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_gravity="center"/>
<TextView
android:id="@+id/te7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="智慧巴士"
android:layout_gravity="center"/>
</LinearLayout>
<LinearLayout
android:layout_weight="1"
android:layout_gravity="center"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/img8"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_gravity="center"/>
<TextView
android:id="@+id/te8"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="智慧巴士"
android:layout_gravity="center"/>
</LinearLayout>
<LinearLayout
android:layout_weight="1"
android:layout_gravity="center"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/img9"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_gravity="center"/>
<TextView
android:id="@+id/te9"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="智慧巴士"
android:layout_gravity="center"/>
</LinearLayout>
<LinearLayout
android:layout_weight="1"
android:layout_gravity="center"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:background="@drawable/yuan"
android:src="@drawable/more"
android:id="@+id/img10"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_gravity="center"/>
<TextView
android:id="@+id/te10"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="更多服务"
android:layout_gravity="center"/>
</LinearLayout>
</LinearLayout>
<TextView
android:layout_margin="10dp"
android:textColor="@color/black"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/blue"
android:text="专题"/>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
//左侧新闻
<LinearLayout
android:id="@+id/left_layout"
android:layout_margin="10dp"
android:layout_width="0dp"
android:layout_height="100dp"
android:orientation="vertical"
android:layout_weight="1">
<ImageView
android:scaleType="fitXY"
android:id="@+id/left_image"
android:layout_width="match_parent"
android:layout_height="80dp"/>
<TextView
android:id="@+id/left_text"
android:singleLine="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="左侧新闻"/>
</LinearLayout>
//右侧新闻
<LinearLayout
android:id="@+id/right_layout"
android:layout_margin="10dp"
android:layout_width="0dp"
android:layout_height="100dp"
android:orientation="vertical"
android:layout_weight="1">
<ImageView
android:scaleType="fitXY"
android:id="@+id/right_img"
android:layout_width="match_parent"
android:layout_height="80dp"/>
<TextView
android:id="@+id/rigth_text"
android:singleLine="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="右侧新闻"/>
</LinearLayout>
</LinearLayout>
//新闻导航栏
<HorizontalScrollView
android:scrollbars="none"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
//新闻导航栏
<TextView
android:id="@+id/t1"
android:layout_weight="1"
android:layout_gravity="center"
android:gravity="center"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:textColor="@color/white"
android:background="@color/blue"
android:text="今日要闻"/>
<View
android:layout_width="1dp"
android:layout_height="match_parent"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"/>
<TextView
style="@style/main_tab"
android:id="@+id/t2"
android:text="今日要闻"/>
<View
android:layout_width="1dp"
android:layout_height="match_parent"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"/>
<TextView
android:id="@+id/t3"
style="@style/main_tab"
android:text="今日要闻"/>
<View
android:layout_width="1dp"
android:layout_height="match_parent"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"/>
<TextView
android:id="@+id/t4"
style="@style/main_tab"
android:text="今日要闻"/>
<View
android:layout_width="1dp"
android:layout_height="match_parent"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"/>
<TextView
android:id="@+id/t5"
style="@style/main_tab"
android:text="今日要闻"/>
<View
android:layout_width="1dp"
android:layout_height="match_parent"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"/>
<TextView
android:id="@+id/t6"
style="@style/main_tab"
android:text="今日要闻"/>
</LinearLayout>
</HorizontalScrollView>
<!--ListView布局!-->
<LinearLayout
android:id="@+id/list_linear"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="20dp">
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
</LinearLayout>
</ScrollView>
</LinearLayout>
布局样式资源:
<style name="main_tab">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">match_parent</item>
<item name="android:layout_weight">1</item>
<item name="android:gravity">center</item>
<item name="android:layout_gravity">center</item>
<item name="android:textColor">@color/black</item>
<item name="background">@color/white</item>
</style>
定义临时存储数据
public static NewsBean NewsDetail;
public static ArrayList<String> SpecailNewsText,SpecailNewsImage,SpecailNewsTitle;
public static FankuiBean fankuidetial;