首页显示的有一个轮播图、两个专题新闻、一个新闻类目、一个新闻列表。数据请求其实都是一样的。
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文件一定要根据要求写,而且必须与服务器中的名字相对应,有些智慧城市需要写推荐服务,因为我写的没有,所以就没写,以后遇见的话再写吧(应该是不会遇见了哈哈哈!!!);



