這是我的第一個頁面:MainActivity

package com.example.yuekaomoni1;import android.animation.ObjectAnimator;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;import java.util.ArrayList;
import java.util.List;public class MainActivity extends AppCompatActivity {private Button btn_add;private MyViewGroup mviewgroup;private int widthPixels;private int heightPixels;int i = 0;private TextView textView;@Override
    protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);btn_add = findViewById(R.id.btn_add);mviewgroup = findViewById(R.id.mviewgroup);DisplayMetrics displayMetrics = new DisplayMetrics();getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);widthPixels = displayMetrics.widthPixels;heightPixels = displayMetrics.heightPixels;btn_add.setOnClickListener(new View.OnClickListener() {@Override
            public void onClick(View v) {switch (v.getId()) {case R.id.btn_add:i++;textView = new TextView(MainActivity.this);textView.setText("这是条目" + i);textView.setWidth(widthPixels / 3);textView.setHeight(heightPixels / 30);if (i % 3 == 0) {textView.setBackgroundColor(Color.RED);} else if (i % 3 == 1) {textView.setBackgroundColor(Color.BLUE);} else {textView.setBackgroundColor(Color.YELLOW);}mviewgroup.addView(textView);animation(textView);break;}}});mviewgroup.setOnLongClickListener(new View.OnLongClickListener() {@Override
            public boolean onLongClick(View v) {AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);builder.setTitle("删除");builder.setMessage("确认删除此条目吗?");builder.setIcon(R.mipmap.ic_launcher);builder.setCancelable(true);builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {@Override
                    public void onClick(DialogInterface dialog, int which) {i--;mviewgroup.removeViewAt(i);}});builder.setNegativeButton("取消", null);builder.show();return true;}});mviewgroup.setOnClickListener(new View.OnClickListener() {@Override
            public void onClick(View v) {Intent intent = new Intent(MainActivity.this, Main2Activity.class);intent.putExtra("name", textView.getText().toString());startActivity(intent);}});}private void animation(TextView textView) {ObjectAnimator animator = ObjectAnimator.ofFloat(textView, "translationX", -300, 0);animator.setDuration(1000);animator.start();}
}
接下來是activity_main的佈局文件
<?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"
    tools:context=".MainActivity"><RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"><TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:text="三色梯"
            android:textSize="25sp" /><Button
            android:id="@+id/btn_add"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentEnd="true"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true"
            android:text="+" /></RelativeLayout><com.example.yuekaomoni1.MyViewGroup
        android:id="@+id/mviewgroup"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></com.example.yuekaomoni1.MyViewGroup>

</LinearLayout>

然後是我們的接口

DataView

package com.example.yuekaomoni1.v;import com.example.yuekaomoni1.p.DataBeans;import java.util.List;public interface DataView {void showData( List<DataBeans.DataBeanX.DataBean> list);
}

Api

package com.example.yuekaomoni1.v;public interface Api {String DATA_URL = "http://365jia.cn/news/api3/365jia/news/headline";
}
IDataView
package com.example.yuekaomoni1.v;import com.example.yuekaomoni1.p.RecyclerBean;import java.util.List;public interface IDataView {void showDataView();void reFresh(List<RecyclerBean.SongListBean> listdata);
}
OnNetListener
package com.example.yuekaomoni1.v;public interface OnNetListener {void OnSuccess(String result);void OnFilder(Exception e);
}
接下來是三個model

DataModel
DataModelImp
HttpUtils

package com.example.yuekaomoni1.m;import com.example.yuekaomoni1.v.OnNetListener;public interface DataModel {void showData(String page, OnNetListener onNetListener);
}
package com.example.yuekaomoni1.m;import com.example.yuekaomoni1.v.Api;
import com.example.yuekaomoni1.v.OnNetListener;import okhttp3.Callback;public class DataModelImp implements DataModel {@Override
    public void showData(String page, final OnNetListener onNetListener) {HttpUtils.getInstance().doGet(Api.DATA_URL + "?page=" + page, new OnNetListener() {@Override
            public void OnSuccess(String result) {onNetListener.OnSuccess(result);}@Override
            public void OnFilder(Exception e) {onNetListener.OnFilder(e);}});}
}
HttpUtils是封裝的工具類
package com.example.yuekaomoni1.m;import android.os.Handler;
import android.os.Looper;import com.example.yuekaomoni1.HttpUtilsCallback;
import com.example.yuekaomoni1.v.OnNetListener;import java.io.IOException;
import java.util.concurrent.TimeUnit;import javax.security.auth.callback.Callback;import okhttp3.Call;
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;public class HttpUtils {private static HttpUtils instance;private final OkHttpClient okHttpClient;private Handler handler;private HttpUtils() {okHttpClient = new OkHttpClient.Builder().connectTimeout(15, TimeUnit.SECONDS).writeTimeout(15, TimeUnit.SECONDS).readTimeout(15, TimeUnit.SECONDS).build();handler = new Handler(Looper.getMainLooper());}public static HttpUtils getInstance() {if (instance == null) {instance = new HttpUtils();}return instance;}public void doGet(String url, final OnNetListener onNetListener) {//创建Request
        final Request request = new Request.Builder().url(url).build();//发送请求
        okHttpClient.newCall(request).enqueue(new okhttp3.Callback() {@Override
            public void onFailure(Call call, final IOException e) {handler.post(new Runnable() {@Override
                    public void run() {onNetListener.OnFilder(e);}});}@Override
            public void onResponse(Call call, Response response) throws IOException {final String string = response.body().string();handler.post(new Runnable() {@Override
                    public void run() {onNetListener.OnSuccess(string);}});}});}
}
接下來是P層
DataPresenterImp
package com.example.yuekaomoni1.p;import com.example.yuekaomoni1.m.DataModelImp;
import com.example.yuekaomoni1.v.DataView;
import com.example.yuekaomoni1.v.OnNetListener;
import com.google.gson.Gson;import java.util.List;public class DataPresenterImp implements DataPresenter {private DataView dataView;private final DataModelImp dataModelImp;public DataPresenterImp(DataView dataView) {this.dataView = dataView;dataModelImp = new DataModelImp();}@Override
    public void showData(String page) {dataModelImp.showData(page, new OnNetListener() {@Override
            public void OnSuccess(String result) {DataBeans dataBeans = new Gson().fromJson(result, DataBeans.class);int code = dataBeans.getCode();DataBeans.DataBeanX data = dataBeans.getData();List<DataBeans.DataBeanX.DataBean> listData = data.getData();if(0 == code){dataView.showData(listData);}}@Override
            public void OnFilder(Exception e) {}});}public void cloneView(){if(dataView != null){dataView = null;}}
}
DataBeans
package com.example.yuekaomoni1.p;import com.google.gson.Gson;import org.json.JSONException;
import org.json.JSONObject;import java.util.List;public class DataBeans {/**
     * httpStatusCode : 200
     * code : 0
     * data : {"page":1,"perpage":20,"max_page":85,"total":1686,"data":[{"id":3541397,"title":"合肥新定位为全国智能家居研发生产中心 四大件产量连续多年居全国之首","link":"lsapp://cn.ahurls.news/news?id=3541397","pics":["appletrecommend/201805/5b08a30fa4712.jpg"],"t":"url","type":"normal","alias":"headline","pic_amount":0,"style":"single_right","comment_amount":0,"source":"","type_sign":"","inner_news":1,"views":162,"comment_amount_label":"0","views_label":"162"},{"id":3541326,"title":"合肥此轮降雨过程将在5月26日结束 未来几日多云为主温度适宜","link":"lsapp://cn.ahurls.news/news?id=3541326","pics":["appletrecommend/201805/5b07c7396bc23.jpg"],"t":"url","type":"normal","alias":"headline","pic_amount":0,"style":"single_right","comment_amount":2,"source":"","type_sign":"","inner_news":1,"views":2677,"comment_amount_label":"2","views_label":"2677"},{"id":3541361,"title":"调查:四川男子录抖音视频辱骂河南人后道歉 你怎么看?","link":"lsapp://cn.ahurls.news/news?id=3541361","pics":["appletrecommend/201805/5b08a3fb804d1.jpg"],"t":"url","type":"vote","alias":"headline","pic_amount":0,"style":"single_right","comment_amount":0,"source":"","type_sign":"投票","inner_news":1,"views":2421,"comment_amount_label":"0","views_label":"2421","pics_new":["appletrecommend/201805/5b08a3fb804d1.jpg"]},{"id":3541394,"title":"安徽岳西:子女住新房父母住危房被认定违法","link":"lsapp://cn.ahurls.news/news?id=3541394","pics":["appletrecommend/201805/5b08a3d8d1fc0.jpg"],"t":"url","type":"normal","alias":"headline","pic_amount":0,"style":"single_right","comment_amount":1,"source":"","type_sign":"","inner_news":1,"views":147,"comment_amount_label":"1","views_label":"147"},{"id":3541299,"title":"英勇!合肥登云庭小区小偷入室盗窃猥亵女业主 民警抱住小偷滚下楼梯","link":"lsapp://cn.ahurls.news/news?id=3541299","pics":["appletrecommend/201805/5b07ff30755de.jpg"],"t":"url","type":"normal","alias":"headline","pic_amount":0,"style":"single_right","comment_amount":4,"source":"","type_sign":"","inner_news":1,"views":3766,"comment_amount_label":"4","views_label":"3766"},{"id":3541399,"title":"\u201c2017年世界500强\u201d中徽商占两席 王文银成为徽商企业家首富","link":"lsapp://cn.ahurls.news/news?id=3541399","pics":["appletrecommend/201805/5b08a60733c46.jpg"],"t":"url","type":"normal","alias":"headline","pic_amount":0,"style":"single_right","comment_amount":0,"source":"","type_sign":"","inner_news":1,"views":73,"comment_amount_label":"0","views_label":"73"},{"id":3541302,"title":"5月25日24时安徽油价上调 92号汽油每升上调0.2元","link":"lsapp://cn.ahurls.news/news?id=3541302","pics":["appletrecommend/201805/5b07d930d0ebf.jpg"],"t":"url","type":"normal","alias":"headline","pic_amount":0,"style":"single_right","comment_amount":11,"source":"","type_sign":"","inner_news":1,"views":3373,"comment_amount_label":"11","views_label":"3373"},{"id":3540446,"title":"【专题】2018世界制造业大会合肥宣言正式发布 全球制造领域有了\u201c合肥声音\u201d","link":"lsapp://cn.ahurls.news/special?id=3540446","pics":["18/0525/5b074ce5c56d4.jpg"],"t":"url","type":"special","alias":"headline","pic_amount":0,"style":"single_fill","comment_amount":2,"source":"","type_sign":"专题","inner_news":1,"views":4582,"comment_amount_label":"2","views_label":"4582","pics_new":["18/0525/5b074ce5c56d4.jpg"]},{"id":3540693,"title":"调查:安徽班主任试喝牛奶确保安全 媒体:缺乏人性温度 你怎么看","link":"lsapp://cn.ahurls.news/news?id=3540693","pics":["appletrecommend/201805/5b073a72cbf8c.jpg"],"t":"url","type":"vote","alias":"headline","pic_amount":0,"style":"single_right","comment_amount":4,"source":"","type_sign":"投票","inner_news":1,"views":6024,"comment_amount_label":"4","views_label":"6024","pics_new":["appletrecommend/201805/5b073a72cbf8c.jpg"]},{"id":3541348,"title":"合肥蜀山区一菜市场厕所垃圾桶惊现一名死婴 警方介入调查","link":"lsapp://cn.ahurls.news/news?id=3541348","pics":["appletrecommend/201805/5b07fe759614b.jpg"],"t":"url","type":"normal","alias":"headline","pic_amount":0,"style":"single_right","comment_amount":2,"source":"","type_sign":"","inner_news":1,"views":3042,"comment_amount_label":"2","views_label":"3042"},{"id":3541039,"title":"这是一个令人振奋的消息! 合肥东部新中心来了","link":"lsapp://cn.ahurls.news/news?id=3541039","pics":["appletrecommend/201805/5b0783c941b0c.jpg"],"t":"url","type":"normal","alias":"headline","pic_amount":0,"style":"single_right","comment_amount":9,"source":"","type_sign":"","inner_news":1,"views":4000,"comment_amount_label":"9","views_label":"4000"},{"id":3541088,"title":"3岁女童因恶性肿瘤身亡 父母被指拿着捐款治疗儿子兔唇放弃女儿","link":"lsapp://cn.ahurls.news/image_news?id=3541088","pics":["special/tuku/201805/5b07a64e1a47655741.jpg","special/tuku/201805/5b07a64e2679386727.jpg","special/tuku/201805/5b07a64e0739a67091.jpg"],"t":"url","type":"images","alias":"headline","pic_amount":3,"style":"multi","comment_amount":2,"source":"","type_sign":"","inner_news":1,"views":2870,"comment_amount_label":"2","views_label":"2870","pics_new":["special/tuku/201805/5b07a64e1a47655741.jpg"]},{"id":3540741,"title":"合肥教育局权威发布!中小学网上报名入学最新最全解答","link":"lsapp://cn.ahurls.news/news?id=3540741","pics":["appletrecommend/201805/5b07530ba7edb.jpg"],"t":"url","type":"normal","alias":"headline","pic_amount":0,"style":"single_right","comment_amount":3,"source":"","type_sign":"","inner_news":1,"views":5045,"comment_amount_label":"3","views_label":"5045"},{"id":3541009,"title":"合肥市公交换乘细则正式出炉 \u201c带人乘车刷卡\u201d不享受换乘优惠","link":"lsapp://cn.ahurls.news/news?id=3541009","pics":["appletrecommend/201805/5b07795a5df5c.jpg"],"t":"url","type":"normal","alias":"headline","pic_amount":0,"style":"single_right","comment_amount":5,"source":"","type_sign":"","inner_news":1,"views":4280,"comment_amount_label":"5","views_label":"4280"},{"id":3541029,"title":"今天凌晨合肥一辆白色轿车滑入天鹅湖 事发时车上或有人","link":"lsapp://cn.ahurls.news/news?id=3541029","pics":["appletrecommend/201805/5b077eba55a41.jpg"],"t":"url","type":"normal","alias":"headline","pic_amount":0,"style":"single_right","comment_amount":12,"source":"","type_sign":"","inner_news":1,"views":8157,"comment_amount_label":"12","views_label":"8157"},{"id":3541232,"title":"【专题】反转!王凤雅重病去世爷爷称善款剩千元 嫣然天使基金提供弟弟治兔唇钱","link":"lsapp://cn.ahurls.news/special?id=3541232","pics":["18/0525/5b07c6738acf1.jpg"],"t":"url","type":"special","alias":"headline","pic_amount":0,"style":"single_fill","comment_amount":1,"source":"","type_sign":"专题","inner_news":1,"views":2011,"comment_amount_label":"1","views_label":"2011","pics_new":["18/0525/5b07c6738acf1.jpg"]},{"id":3540737,"title":"站内何时能充值合肥通?合肥轨道公司回复市民热点问题","link":"lsapp://cn.ahurls.news/news?id=3540737","pics":["appletrecommend/201805/5b073e2513048.jpg"],"t":"url","type":"normal","alias":"headline","pic_amount":0,"style":"single_right","comment_amount":4,"source":"","type_sign":"","inner_news":1,"views":4351,"comment_amount_label":"4","views_label":"4351"},{"id":3541162,"title":"活久见!男子不满女友登记时\u201c再考虑一下\u201d 一顿拳脚后两人又领证了","link":"lsapp://cn.ahurls.news/news?id=3541162","pics":["appletrecommend/201805/5b07b9a258016.jpg"],"t":"url","type":"normal","alias":"headline","pic_amount":0,"style":"single_right","comment_amount":7,"source":"","type_sign":"","inner_news":1,"views":3182,"comment_amount_label":"7","views_label":"3182"},{"id":3540754,"title":"今年合肥小学初中网上报名如何登记操作?这份\u201c入学指南\u201d请收好","link":"lsapp://cn.ahurls.news/news?id=3540754","pics":["appletrecommend/201805/5b07532313edd.jpg"],"t":"url","type":"normal","alias":"headline","pic_amount":0,"style":"single_right","comment_amount":2,"source":"","type_sign":"","inner_news":1,"views":6194,"comment_amount_label":"2","views_label":"6194"},{"id":3541169,"title":"合肥奔驰女不满物业规定 违停\u201c堵门\u201d辱骂殴打保安","link":"lsapp://cn.ahurls.news/image_news?id=3541169","pics":["special/tuku/201805/5b07ba822763455489.jpg","special/tuku/201805/5b07ba825c5e834613.jpg","special/tuku/201805/5b07ba8270df111019.jpg"],"t":"url","type":"images","alias":"headline","pic_amount":3,"style":"multi","comment_amount":6,"source":"","type_sign":"","inner_news":1,"views":1895,"comment_amount_label":"6","views_label":"1895","pics_new":["special/tuku/201805/5b07ba822763455489.jpg"]},{"id":3541308,"title":"流行性腮腺炎进入高发季 合肥疾控中心专家:幼儿需及时接种疫苗","link":"lsapp://cn.ahurls.news/news?id=3541308","pics":["appletrecommend/201805/5b0803117f3c6.jpg"],"t":"url","type":"normal","alias":"headline","pic_amount":0,"style":"single_right","comment_amount":3,"source":"","type_sign":"","inner_news":1,"views":1963,"comment_amount_label":"3","views_label":"1963"},{"id":3541301,"title":"女子周旋两个丈夫间5年未被发现 花钱雇老夫妻扮演自己父母","link":"lsapp://cn.ahurls.news/news?id=3541301","pics":["appletrecommend/201805/5b0802bce6c69.jpg"],"t":"url","type":"normal","alias":"headline","pic_amount":0,"style":"single_right","comment_amount":3,"source":"","type_sign":"","inner_news":1,"views":2222,"comment_amount_label":"3","views_label":"2222"},{"id":3541295,"title":"四川男子录抖音视频辱骂河南人后道歉:自己初中文化不了解地域黑","link":"lsapp://cn.ahurls.news/news?id=3541295","pics":["appletrecommend/201805/5b0801bbde00d.jpg"],"t":"url","type":"normal","alias":"headline","pic_amount":0,"style":"single_right","comment_amount":2,"source":"","type_sign":"","inner_news":1,"views":2457,"comment_amount_label":"2","views_label":"2457"},{"id":3541226,"title":"【大碗视频】黑科技!直击2018世界制造业大会:应急情况加色拉油 直升机也能飞","link":"lsapp://cn.ahurls.news/news?id=3541226","pics":["appletrecommend/201805/5b08012ee91f3.jpg"],"t":"url","type":"video","alias":"headline","pic_amount":0,"style":"single_right","comment_amount":2,"source":"","type_sign":"视频","inner_news":1,"views":2539,"comment_amount_label":"2","views_label":"2539","pics_new":["appletrecommend/201805/5b08012ee91f3.jpg"]},{"id":3541213,"title":"清华北大公布2018保送生拟录取名单 合肥这两所学校学生上榜","link":"lsapp://cn.ahurls.news/news?id=3541213","pics":["appletrecommend/201805/5b07d21525ca6.jpg"],"t":"url","type":"normal","alias":"headline","pic_amount":0,"style":"single_right","comment_amount":3,"source":"","type_sign":"","inner_news":1,"views":3586,"comment_amount_label":"3","views_label":"3586"},{"id":3540757,"title":"捂脸!男子婚后压力大扮女装卖淫 嫖客得知真相当场吐了","link":"lsapp://cn.ahurls.news/news?id=3540757","pics":["appletrecommend/201805/5b0751ecf0eda.jpg"],"t":"url","type":"normal","alias":"headline","pic_amount":0,"style":"single_right","comment_amount":3,"source":"","type_sign":"","inner_news":1,"views":6107,"comment_amount_label":"3","views_label":"6107"},{"id":3541268,"title":"\u201c小猪佩奇\u201d文身贴安全吗? 部分商品无\u201c安全提示\u201d","link":"lsapp://cn.ahurls.news/news?id=3541268","pics":["appletrecommend/201805/5b07d45876402.jpg"],"t":"url","type":"normal","alias":"headline","pic_amount":0,"style":"single_right","comment_amount":3,"source":"","type_sign":"","inner_news":1,"views":1985,"comment_amount_label":"3","views_label":"1985"},{"id":3540922,"title":"64岁老汉猥亵小学女生:就为找点儿刺激","link":"lsapp://cn.ahurls.news/image_news?id=3540922","pics":["special/tuku/201805/5b076e1c36c8e31616.jpg","special/tuku/201805/5b076e1c5164d76430.jpg","special/tuku/201805/5b076e1c64ed337508.jpg"],"t":"url","type":"images","alias":"headline","pic_amount":3,"style":"multi","comment_amount":2,"source":"","type_sign":"","inner_news":1,"views":1986,"comment_amount_label":"2","views_label":"1986","pics_new":["special/tuku/201805/5b076e1c36c8e31616.jpg"]},{"id":3541223,"title":"四川惊现\u201c摔儿老师\u201d:抓小孩的手提起来转圈体罚","link":"lsapp://cn.ahurls.news/news?id=3541223","pics":["appletrecommend/201805/5b07cf20d38d0.jpg"],"t":"url","type":"normal","alias":"headline","pic_amount":0,"style":"single_right","comment_amount":2,"source":"","type_sign":"","inner_news":1,"views":2047,"comment_amount_label":"2","views_label":"2047"},{"id":3541214,"title":"大爷替35岁女儿相亲要求有房是公务员:追求稳定的生活","link":"lsapp://cn.ahurls.news/news?id=3541214","pics":["appletrecommend/201805/5b07c4f720f6e.png"],"t":"url","type":"normal","alias":"headline","pic_amount":0,"style":"single_right","comment_amount":3,"source":"","type_sign":"","inner_news":1,"views":2206,"comment_amount_label":"3","views_label":"2206"}],"extras":{"slider":[{"id":3541393,"pic":"18/0526/5b08a55aa0724.jpg","link":"lsapp://cn.ahurls.news/news?id=3541393","t":"url","inner_news":1,"title":"来安徽旅游这5条精品路线不可错过","type":"nomal","type_sign":""},{"id":3540769,"pic":"18/0525/5b07c9c67edab.jpg","link":"lsapp://cn.ahurls.news/news?id=3540769","t":"url","inner_news":1,"title":"合肥构建未成人心理健康\u201c防护网\u201d","type":"nomal","type_sign":""},{"id":3540819,"pic":"18/0525/5b07aaec28743.jpg","link":"lsapp://cn.ahurls.news/news?id=3540819","t":"url","inner_news":1,"title":"数据告诉你\u201c合肥造\u201d到底有多强","type":"nomal","type_sign":""},{"id":3540806,"pic":"18/0525/5b076b21b1432.jpg","link":"lsapp://cn.ahurls.news/news?id=3540806","t":"url","inner_news":1,"title":"解码合肥工业经济跨越之路","type":"nomal","type_sign":""},{"id":3540583,"pic":"18/0524/5b06b8c92b95d.jpg","link":"lsapp://cn.ahurls.news/news?id=3540583","t":"url","inner_news":1,"title":"安徽一季度水质对赌结果出炉","type":"nomal","type_sign":""}]},"bindtips":""}
     */

    private int httpStatusCode;private int code;private DataBeanX data;public static DataBeans objectFromData(String str) {return new Gson().fromJson(str, DataBeans.class);}public static DataBeans objectFromData(String str, String key) {try {JSONObject jsonObject = new JSONObject(str);return new Gson().fromJson(jsonObject.getString(str), DataBeans.class);} catch (JSONException e) {e.printStackTrace();}return null;}public int getHttpStatusCode() {return httpStatusCode;}public void setHttpStatusCode(int httpStatusCode) {this.httpStatusCode = httpStatusCode;}public int getCode() {return code;}public void setCode(int code) {this.code = code;}public DataBeanX getData() {return data;}public void setData(DataBeanX data) {this.data = data;}public static class DataBeanX {/**
         * page : 1
         * perpage : 20
         * max_page : 85
         * total : 1686
         * data : [{"id":3541397,"title":"合肥新定位为全国智能家居研发生产中心 四大件产量连续多年居全国之首","link":"lsapp://cn.ahurls.news/news?id=3541397","pics":["appletrecommend/201805/5b08a30fa4712.jpg"],"t":"url","type":"normal","alias":"headline","pic_amount":0,"style":"single_right","comment_amount":0,"source":"","type_sign":"","inner_news":1,"views":162,"comment_amount_label":"0","views_label":"162"},{"id":3541326,"title":"合肥此轮降雨过程将在5月26日结束 未来几日多云为主温度适宜","link":"lsapp://cn.ahurls.news/news?id=3541326","pics":["appletrecommend/201805/5b07c7396bc23.jpg"],"t":"url","type":"normal","alias":"headline","pic_amount":0,"style":"single_right","comment_amount":2,"source":"","type_sign":"","inner_news":1,"views":2677,"comment_amount_label":"2","views_label":"2677"},{"id":3541361,"title":"调查:四川男子录抖音视频辱骂河南人后道歉 你怎么看?","link":"lsapp://cn.ahurls.news/news?id=3541361","pics":["appletrecommend/201805/5b08a3fb804d1.jpg"],"t":"url","type":"vote","alias":"headline","pic_amount":0,"style":"single_right","comment_amount":0,"source":"","type_sign":"投票","inner_news":1,"views":2421,"comment_amount_label":"0","views_label":"2421","pics_new":["appletrecommend/201805/5b08a3fb804d1.jpg"]},{"id":3541394,"title":"安徽岳西:子女住新房父母住危房被认定违法","link":"lsapp://cn.ahurls.news/news?id=3541394","pics":["appletrecommend/201805/5b08a3d8d1fc0.jpg"],"t":"url","type":"normal","alias":"headline","pic_amount":0,"style":"single_right","comment_amount":1,"source":"","type_sign":"","inner_news":1,"views":147,"comment_amount_label":"1","views_label":"147"},{"id":3541299,"title":"英勇!合肥登云庭小区小偷入室盗窃猥亵女业主 民警抱住小偷滚下楼梯","link":"lsapp://cn.ahurls.news/news?id=3541299","pics":["appletrecommend/201805/5b07ff30755de.jpg"],"t":"url","type":"normal","alias":"headline","pic_amount":0,"style":"single_right","comment_amount":4,"source":"","type_sign":"","inner_news":1,"views":3766,"comment_amount_label":"4","views_label":"3766"},{"id":3541399,"title":"\u201c2017年世界500强\u201d中徽商占两席 王文银成为徽商企业家首富","link":"lsapp://cn.ahurls.news/news?id=3541399","pics":["appletrecommend/201805/5b08a60733c46.jpg"],"t":"url","type":"normal","alias":"headline","pic_amount":0,"style":"single_right","comment_amount":0,"source":"","type_sign":"","inner_news":1,"views":73,"comment_amount_label":"0","views_label":"73"},{"id":3541302,"title":"5月25日24时安徽油价上调 92号汽油每升上调0.2元","link":"lsapp://cn.ahurls.news/news?id=3541302","pics":["appletrecommend/201805/5b07d930d0ebf.jpg"],"t":"url","type":"normal","alias":"headline","pic_amount":0,"style":"single_right","comment_amount":11,"source":"","type_sign":"","inner_news":1,"views":3373,"comment_amount_label":"11","views_label":"3373"},{"id":3540446,"title":"【专题】2018世界制造业大会合肥宣言正式发布 全球制造领域有了\u201c合肥声音\u201d","link":"lsapp://cn.ahurls.news/special?id=3540446","pics":["18/0525/5b074ce5c56d4.jpg"],"t":"url","type":"special","alias":"headline","pic_amount":0,"style":"single_fill","comment_amount":2,"source":"","type_sign":"专题","inner_news":1,"views":4582,"comment_amount_label":"2","views_label":"4582","pics_new":["18/0525/5b074ce5c56d4.jpg"]},{"id":3540693,"title":"调查:安徽班主任试喝牛奶确保安全 媒体:缺乏人性温度 你怎么看","link":"lsapp://cn.ahurls.news/news?id=3540693","pics":["appletrecommend/201805/5b073a72cbf8c.jpg"],"t":"url","type":"vote","alias":"headline","pic_amount":0,"style":"single_right","comment_amount":4,"source":"","type_sign":"投票","inner_news":1,"views":6024,"comment_amount_label":"4","views_label":"6024","pics_new":["appletrecommend/201805/5b073a72cbf8c.jpg"]},{"id":3541348,"title":"合肥蜀山区一菜市场厕所垃圾桶惊现一名死婴 警方介入调查","link":"lsapp://cn.ahurls.news/news?id=3541348","pics":["appletrecommend/201805/5b07fe759614b.jpg"],"t":"url","type":"normal","alias":"headline","pic_amount":0,"style":"single_right","comment_amount":2,"source":"","type_sign":"","inner_news":1,"views":3042,"comment_amount_label":"2","views_label":"3042"},{"id":3541039,"title":"这是一个令人振奋的消息! 合肥东部新中心来了","link":"lsapp://cn.ahurls.news/news?id=3541039","pics":["appletrecommend/201805/5b0783c941b0c.jpg"],"t":"url","type":"normal","alias":"headline","pic_amount":0,"style":"single_right","comment_amount":9,"source":"","type_sign":"","inner_news":1,"views":4000,"comment_amount_label":"9","views_label":"4000"},{"id":3541088,"title":"3岁女童因恶性肿瘤身亡 父母被指拿着捐款治疗儿子兔唇放弃女儿","link":"lsapp://cn.ahurls.news/image_news?id=3541088","pics":["special/tuku/201805/5b07a64e1a47655741.jpg","special/tuku/201805/5b07a64e2679386727.jpg","special/tuku/201805/5b07a64e0739a67091.jpg"],"t":"url","type":"images","alias":"headline","pic_amount":3,"style":"multi","comment_amount":2,"source":"","type_sign":"","inner_news":1,"views":2870,"comment_amount_label":"2","views_label":"2870","pics_new":["special/tuku/201805/5b07a64e1a47655741.jpg"]},{"id":3540741,"title":"合肥教育局权威发布!中小学网上报名入学最新最全解答","link":"lsapp://cn.ahurls.news/news?id=3540741","pics":["appletrecommend/201805/5b07530ba7edb.jpg"],"t":"url","type":"normal","alias":"headline","pic_amount":0,"style":"single_right","comment_amount":3,"source":"","type_sign":"","inner_news":1,"views":5045,"comment_amount_label":"3","views_label":"5045"},{"id":3541009,"title":"合肥市公交换乘细则正式出炉 \u201c带人乘车刷卡\u201d不享受换乘优惠","link":"lsapp://cn.ahurls.news/news?id=3541009","pics":["appletrecommend/201805/5b07795a5df5c.jpg"],"t":"url","type":"normal","alias":"headline","pic_amount":0,"style":"single_right","comment_amount":5,"source":"","type_sign":"","inner_news":1,"views":4280,"comment_amount_label":"5","views_label":"4280"},{"id":3541029,"title":"今天凌晨合肥一辆白色轿车滑入天鹅湖 事发时车上或有人","link":"lsapp://cn.ahurls.news/news?id=3541029","pics":["appletrecommend/201805/5b077eba55a41.jpg"],"t":"url","type":"normal","alias":"headline","pic_amount":0,"style":"single_right","comment_amount":12,"source":"","type_sign":"","inner_news":1,"views":8157,"comment_amount_label":"12","views_label":"8157"},{"id":3541232,"title":"【专题】反转!王凤雅重病去世爷爷称善款剩千元 嫣然天使基金提供弟弟治兔唇钱","link":"lsapp://cn.ahurls.news/special?id=3541232","pics":["18/0525/5b07c6738acf1.jpg"],"t":"url","type":"special","alias":"headline","pic_amount":0,"style":"single_fill","comment_amount":1,"source":"","type_sign":"专题","inner_news":1,"views":2011,"comment_amount_label":"1","views_label":"2011","pics_new":["18/0525/5b07c6738acf1.jpg"]},{"id":3540737,"title":"站内何时能充值合肥通?合肥轨道公司回复市民热点问题","link":"lsapp://cn.ahurls.news/news?id=3540737","pics":["appletrecommend/201805/5b073e2513048.jpg"],"t":"url","type":"normal","alias":"headline","pic_amount":0,"style":"single_right","comment_amount":4,"source":"","type_sign":"","inner_news":1,"views":4351,"comment_amount_label":"4","views_label":"4351"},{"id":3541162,"title":"活久见!男子不满女友登记时\u201c再考虑一下\u201d 一顿拳脚后两人又领证了","link":"lsapp://cn.ahurls.news/news?id=3541162","pics":["appletrecommend/201805/5b07b9a258016.jpg"],"t":"url","type":"normal","alias":"headline","pic_amount":0,"style":"single_right","comment_amount":7,"source":"","type_sign":"","inner_news":1,"views":3182,"comment_amount_label":"7","views_label":"3182"},{"id":3540754,"title":"今年合肥小学初中网上报名如何登记操作?这份\u201c入学指南\u201d请收好","link":"lsapp://cn.ahurls.news/news?id=3540754","pics":["appletrecommend/201805/5b07532313edd.jpg"],"t":"url","type":"normal","alias":"headline","pic_amount":0,"style":"single_right","comment_amount":2,"source":"","type_sign":"","inner_news":1,"views":6194,"comment_amount_label":"2","views_label":"6194"},{"id":3541169,"title":"合肥奔驰女不满物业规定 违停\u201c堵门\u201d辱骂殴打保安","link":"lsapp://cn.ahurls.news/image_news?id=3541169","pics":["special/tuku/201805/5b07ba822763455489.jpg","special/tuku/201805/5b07ba825c5e834613.jpg","special/tuku/201805/5b07ba8270df111019.jpg"],"t":"url","type":"images","alias":"headline","pic_amount":3,"style":"multi","comment_amount":6,"source":"","type_sign":"","inner_news":1,"views":1895,"comment_amount_label":"6","views_label":"1895","pics_new":["special/tuku/201805/5b07ba822763455489.jpg"]},{"id":3541308,"title":"流行性腮腺炎进入高发季 合肥疾控中心专家:幼儿需及时接种疫苗","link":"lsapp://cn.ahurls.news/news?id=3541308","pics":["appletrecommend/201805/5b0803117f3c6.jpg"],"t":"url","type":"normal","alias":"headline","pic_amount":0,"style":"single_right","comment_amount":3,"source":"","type_sign":"","inner_news":1,"views":1963,"comment_amount_label":"3","views_label":"1963"},{"id":3541301,"title":"女子周旋两个丈夫间5年未被发现 花钱雇老夫妻扮演自己父母","link":"lsapp://cn.ahurls.news/news?id=3541301","pics":["appletrecommend/201805/5b0802bce6c69.jpg"],"t":"url","type":"normal","alias":"headline","pic_amount":0,"style":"single_right","comment_amount":3,"source":"","type_sign":"","inner_news":1,"views":2222,"comment_amount_label":"3","views_label":"2222"},{"id":3541295,"title":"四川男子录抖音视频辱骂河南人后道歉:自己初中文化不了解地域黑","link":"lsapp://cn.ahurls.news/news?id=3541295","pics":["appletrecommend/201805/5b0801bbde00d.jpg"],"t":"url","type":"normal","alias":"headline","pic_amount":0,"style":"single_right","comment_amount":2,"source":"","type_sign":"","inner_news":1,"views":2457,"comment_amount_label":"2","views_label":"2457"},{"id":3541226,"title":"【大碗视频】黑科技!直击2018世界制造业大会:应急情况加色拉油 直升机也能飞","link":"lsapp://cn.ahurls.news/news?id=3541226","pics":["appletrecommend/201805/5b08012ee91f3.jpg"],"t":"url","type":"video","alias":"headline","pic_amount":0,"style":"single_right","comment_amount":2,"source":"","type_sign":"视频","inner_news":1,"views":2539,"comment_amount_label":"2","views_label":"2539","pics_new":["appletrecommend/201805/5b08012ee91f3.jpg"]},{"id":3541213,"title":"清华北大公布2018保送生拟录取名单 合肥这两所学校学生上榜","link":"lsapp://cn.ahurls.news/news?id=3541213","pics":["appletrecommend/201805/5b07d21525ca6.jpg"],"t":"url","type":"normal","alias":"headline","pic_amount":0,"style":"single_right","comment_amount":3,"source":"","type_sign":"","inner_news":1,"views":3586,"comment_amount_label":"3","views_label":"3586"},{"id":3540757,"title":"捂脸!男子婚后压力大扮女装卖淫 嫖客得知真相当场吐了","link":"lsapp://cn.ahurls.news/news?id=3540757","pics":["appletrecommend/201805/5b0751ecf0eda.jpg"],"t":"url","type":"normal","alias":"headline","pic_amount":0,"style":"single_right","comment_amount":3,"source":"","type_sign":"","inner_news":1,"views":6107,"comment_amount_label":"3","views_label":"6107"},{"id":3541268,"title":"\u201c小猪佩奇\u201d文身贴安全吗? 部分商品无\u201c安全提示\u201d","link":"lsapp://cn.ahurls.news/news?id=3541268","pics":["appletrecommend/201805/5b07d45876402.jpg"],"t":"url","type":"normal","alias":"headline","pic_amount":0,"style":"single_right","comment_amount":3,"source":"","type_sign":"","inner_news":1,"views":1985,"comment_amount_label":"3","views_label":"1985"},{"id":3540922,"title":"64岁老汉猥亵小学女生:就为找点儿刺激","link":"lsapp://cn.ahurls.news/image_news?id=3540922","pics":["special/tuku/201805/5b076e1c36c8e31616.jpg","special/tuku/201805/5b076e1c5164d76430.jpg","special/tuku/201805/5b076e1c64ed337508.jpg"],"t":"url","type":"images","alias":"headline","pic_amount":3,"style":"multi","comment_amount":2,"source":"","type_sign":"","inner_news":1,"views":1986,"comment_amount_label":"2","views_label":"1986","pics_new":["special/tuku/201805/5b076e1c36c8e31616.jpg"]},{"id":3541223,"title":"四川惊现\u201c摔儿老师\u201d:抓小孩的手提起来转圈体罚","link":"lsapp://cn.ahurls.news/news?id=3541223","pics":["appletrecommend/201805/5b07cf20d38d0.jpg"],"t":"url","type":"normal","alias":"headline","pic_amount":0,"style":"single_right","comment_amount":2,"source":"","type_sign":"","inner_news":1,"views":2047,"comment_amount_label":"2","views_label":"2047"},{"id":3541214,"title":"大爷替35岁女儿相亲要求有房是公务员:追求稳定的生活","link":"lsapp://cn.ahurls.news/news?id=3541214","pics":["appletrecommend/201805/5b07c4f720f6e.png"],"t":"url","type":"normal","alias":"headline","pic_amount":0,"style":"single_right","comment_amount":3,"source":"","type_sign":"","inner_news":1,"views":2206,"comment_amount_label":"3","views_label":"2206"}]
         * extras : {"slider":[{"id":3541393,"pic":"18/0526/5b08a55aa0724.jpg","link":"lsapp://cn.ahurls.news/news?id=3541393","t":"url","inner_news":1,"title":"来安徽旅游这5条精品路线不可错过","type":"nomal","type_sign":""},{"id":3540769,"pic":"18/0525/5b07c9c67edab.jpg","link":"lsapp://cn.ahurls.news/news?id=3540769","t":"url","inner_news":1,"title":"合肥构建未成人心理健康\u201c防护网\u201d","type":"nomal","type_sign":""},{"id":3540819,"pic":"18/0525/5b07aaec28743.jpg","link":"lsapp://cn.ahurls.news/news?id=3540819","t":"url","inner_news":1,"title":"数据告诉你\u201c合肥造\u201d到底有多强","type":"nomal","type_sign":""},{"id":3540806,"pic":"18/0525/5b076b21b1432.jpg","link":"lsapp://cn.ahurls.news/news?id=3540806","t":"url","inner_news":1,"title":"解码合肥工业经济跨越之路","type":"nomal","type_sign":""},{"id":3540583,"pic":"18/0524/5b06b8c92b95d.jpg","link":"lsapp://cn.ahurls.news/news?id=3540583","t":"url","inner_news":1,"title":"安徽一季度水质对赌结果出炉","type":"nomal","type_sign":""}]}
         * bindtips :
         */

        private int page;private int perpage;private int max_page;private int total;private ExtrasBean extras;private String bindtips;private List<DataBean> data;public static DataBeanX objectFromData(String str) {return new Gson().fromJson(str, DataBeanX.class);}public static DataBeanX objectFromData(String str, String key) {try {JSONObject jsonObject = new JSONObject(str);return new Gson().fromJson(jsonObject.getString(str), DataBeanX.class);} catch (JSONException e) {e.printStackTrace();}return null;}public int getPage() {return page;}public void setPage(int page) {this.page = page;}public int getPerpage() {return perpage;}public void setPerpage(int perpage) {this.perpage = perpage;}public int getMax_page() {return max_page;}public void setMax_page(int max_page) {this.max_page = max_page;}public int getTotal() {return total;}public void setTotal(int total) {this.total = total;}public ExtrasBean getExtras() {return extras;}public void setExtras(ExtrasBean extras) {this.extras = extras;}public String getBindtips() {return bindtips;}public void setBindtips(String bindtips) {this.bindtips = bindtips;}public List<DataBean> getData() {return data;}public void setData(List<DataBean> data) {this.data = data;}public static class ExtrasBean {private List<SliderBean> slider;public static ExtrasBean objectFromData(String str) {return new Gson().fromJson(str, ExtrasBean.class);}public static ExtrasBean objectFromData(String str, String key) {try {JSONObject jsonObject = new JSONObject(str);return new Gson().fromJson(jsonObject.getString(str), ExtrasBean.class);} catch (JSONException e) {e.printStackTrace();}return null;}public List<SliderBean> getSlider() {return slider;}public void setSlider(List<SliderBean> slider) {this.slider = slider;}public static class SliderBean {/**
                 * id : 3541393
                 * pic : 18/0526/5b08a55aa0724.jpg
                 * link : lsapp://cn.ahurls.news/news?id=3541393
                 * t : url
                 * inner_news : 1
                 * title : 来安徽旅游这5条精品路线不可错过
                 * type : nomal
                 * type_sign :
                 */

                private int id;private String pic;private String link;private String t;private int inner_news;private String title;private String type;private String type_sign;public static SliderBean objectFromData(String str) {return new Gson().fromJson(str, SliderBean.class);}public static SliderBean objectFromData(String str, String key) {try {JSONObject jsonObject = new JSONObject(str);return new Gson().fromJson(jsonObject.getString(str), SliderBean.class);} catch (JSONException e) {e.printStackTrace();}return null;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getPic() {return pic;}public void setPic(String pic) {this.pic = pic;}public String getLink() {return link;}public void setLink(String link) {this.link = link;}public String getT() {return t;}public void setT(String t) {this.t = t;}public int getInner_news() {return inner_news;}public void setInner_news(int inner_news) {this.inner_news = inner_news;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getType() {return type;}public void setType(String type) {this.type = type;}public String getType_sign() {return type_sign;}public void setType_sign(String type_sign) {this.type_sign = type_sign;}}}public static class DataBean {/**
             * id : 3541397
             * title : 合肥新定位为全国智能家居研发生产中心 四大件产量连续多年居全国之首
             * link : lsapp://cn.ahurls.news/news?id=3541397
             * pics : ["appletrecommend/201805/5b08a30fa4712.jpg"]
             * t : url
             * type : normal
             * alias : headline
             * pic_amount : 0
             * style : single_right
             * comment_amount : 0
             * source :
             * type_sign :
             * inner_news : 1
             * views : 162
             * comment_amount_label : 0
             * views_label : 162
             * pics_new : ["appletrecommend/201805/5b08a3fb804d1.jpg"]
             */

            private int id;private String title;private String link;private String t;private String type;private String alias;private int pic_amount;private String style;private int comment_amount;private String source;private String type_sign;private int inner_news;private int views;private String comment_amount_label;private String views_label;private List<String> pics;private List<String> pics_new;public static DataBean objectFromData(String str) {return new Gson().fromJson(str, DataBean.class);}public static DataBean objectFromData(String str, String key) {try {JSONObject jsonObject = new JSONObject(str);return new Gson().fromJson(jsonObject.getString(str), DataBean.class);} catch (JSONException e) {e.printStackTrace();}return null;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getLink() {return link;}public void setLink(String link) {this.link = link;}public String getT() {return t;}public void setT(String t) {this.t = t;}public String getType() {return type;}public void setType(String type) {this.type = type;}public String getAlias() {return alias;}public void setAlias(String alias) {this.alias = alias;}public int getPic_amount() {return pic_amount;}public void setPic_amount(int pic_amount) {this.pic_amount = pic_amount;}public String getStyle() {return style;}public void setStyle(String style) {this.style = style;}public int getComment_amount() {return comment_amount;}public void setComment_amount(int comment_amount) {this.comment_amount = comment_amount;}public String getSource() {return source;}public void setSource(String source) {this.source = source;}public String getType_sign() {return type_sign;}public void setType_sign(String type_sign) {this.type_sign = type_sign;}public int getInner_news() {return inner_news;}public void setInner_news(int inner_news) {this.inner_news = inner_news;}public int getViews() {return views;}public void setViews(int views) {this.views = views;}public String getComment_amount_label() {return comment_amount_label;}public void setComment_amount_label(String comment_amount_label) {this.comment_amount_label = comment_amount_label;}public String getViews_label() {return views_label;}public void setViews_label(String views_label) {this.views_label = views_label;}public List<String> getPics() {return pics;}public void setPics(List<String> pics) {this.pics = pics;}public List<String> getPics_new() {return pics_new;}public void setPics_new(List<String> pics_new) {this.pics_new = pics_new;}}}
}
DataPresenter
package com.example.yuekaomoni1.p;public interface DataPresenter {void showData(String page);
}
然後是我們的MyApp
package com.example.yuekaomoni1;import android.app.Application;
import android.os.Environment;import com.nostra13.universalimageloader.cache.memory.impl.LRULimitedMemoryCache;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.QueueProcessingType;import java.io.File;/**
 * Created by Administrator on 2018/1/3.
 */

public class Myapplication extends Application {@Override
    public void onCreate() {super.onCreate();ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this).memoryCacheExtraOptions(480, 800).diskCacheExtraOptions(480, 800, null).tasksProcessingOrder(QueueProcessingType.FIFO).denyCacheImageMultipleSizesInMemory().memoryCache(new LRULimitedMemoryCache(2 * 1024 * 1024)).memoryCacheSize(2 * 1024 * 1024).memoryCacheSizePercentage(13).build();ImageLoader.getInstance().init(configuration);}
}
這個類是我們的自定義的view
package com.example.yuekaomoni1;import android.content.Context;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;public class MyViewGroup extends ViewGroup {private int measuredWidth;public MyViewGroup(Context context) {this(context, null);}public MyViewGroup(Context context, AttributeSet attrs) {this(context, attrs, 0);}public MyViewGroup(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);}@Override
    protected void onDraw(Canvas canvas) {super.onDraw(canvas);}@Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {super.onMeasure(widthMeasureSpec, heightMeasureSpec);measuredWidth = getMeasuredWidth();//测量子View的宽高,只有Viewgroup中有这个方法   直接继承View没有这个方法
        measureChildren(widthMeasureSpec, heightMeasureSpec);}@Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {//拿到子控件的个数
        int childCount = getChildCount();//定义一个临时变量 高度
        int startHeight = 0;int startWidth = 0;//循环遍历每一个View
        for (int i = 0; i < childCount; i++) {View v = getChildAt(i);//给每一个View设置自己的位置
            v.layout(startWidth, startHeight, startWidth + v.getMeasuredWidth(), startHeight + v.getMeasuredHeight());startHeight += v.getMeasuredHeight();startWidth += v.getMeasuredWidth();if (startWidth >= measuredWidth) {startWidth = 0;}}}
}
SpacesItemDecoration
package com.example.yuekaomoni1;import android.graphics.Rect;
import android.support.v7.widget.RecyclerView;
import android.view.View;public class SpacesItemDecoration extends RecyclerView.ItemDecoration {private int space;public SpacesItemDecoration(int space) {this.space = space;}@Override
    public void getItemOffsets(Rect outRect, View view,RecyclerView parent, RecyclerView.State state) {outRect.left = space;outRect.right = space;outRect.bottom = space;// Add top margin only for the first item to avoid double space between items
        if (parent.getChildPosition(view) == 0)outRect.top = space;}
}
ShopRecyclerAdapter
package com.example.yuekaomoni1;import android.animation.ObjectAnimator;
import android.content.Context;
import android.content.DialogInterface;
import android.support.annotation.NonNull;
import android.support.v7.app.AlertDialog;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;import com.bumptech.glide.Glide;
import com.example.yuekaomoni1.p.DataBeans;
import com.example.yuekaomoni1.p.RecyclerBean;
import com.jcodecraeer.xrecyclerview.XRecyclerView;
import com.nostra13.universalimageloader.core.ImageLoader;import java.util.ArrayList;
import java.util.List;import static android.graphics.Typeface.NORMAL;public class ShopRecyclerAdapter extends XRecyclerView.Adapter<XRecyclerView.ViewHolder> {private final static int NORMAL = 1;private final static int IMAGES = 2;private String imageSplice = "http://365jia.cn/uploads/";private LayoutInflater inflater;Context context;private List<DataBeans.DataBeanX.DataBean> list;public ShopRecyclerAdapter(Context context, List<DataBeans.DataBeanX.DataBean> list) {this.context = context;this.list = list;inflater = LayoutInflater.from(context);}@Override
    public int getItemViewType(int position) {String type = list.get(position).getType();if ("images".equals(type)) {return IMAGES;} else {return NORMAL;}}public void setData(List<DataBeans.DataBeanX.DataBean> list) {list.addAll(list);}@NonNull
    @Override
    public XRecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {RecyclerView.ViewHolder holder;if (viewType == NORMAL) {View view = inflater.inflate(R.layout.normal_item, parent, false);holder = new NormalViewHolder(view);} else if (viewType == IMAGES) {View view = inflater.inflate(R.layout.images_item, parent, false);holder = new ImagesViewHolder(view);} else {holder = null;}return holder;}@Override
    public void onBindViewHolder(@NonNull XRecyclerView.ViewHolder holder, final int position) {int itemViewType = getItemViewType(position);DataBeans.DataBeanX.DataBean dataBean = list.get(position);if (itemViewType == NORMAL) {NormalViewHolder normalViewHolder = (NormalViewHolder) holder;normalViewHolder.normal_title.setText(dataBean.getTitle());Glide.with(context).load(imageSplice + dataBean.getPics().get(0)).into(normalViewHolder.normal_img);normalViewHolder.itemView.setOnClickListener(new View.OnClickListener() {@Override
                public void onClick(View v) {if (mOnItemClick != null) {mOnItemClick.onItemClick(position);}}});} else if (itemViewType == IMAGES) {ImagesViewHolder imagesViewHolder = (ImagesViewHolder) holder;imagesViewHolder.images_title.setText(dataBean.getTitle());Glide.with(context).load(imageSplice + dataBean.getPics().get(0)).into(imagesViewHolder.images01);Glide.with(context).load(imageSplice + dataBean.getPics().get(1)).into(imagesViewHolder.images02);Glide.with(context).load(imageSplice + dataBean.getPics().get(2)).into(imagesViewHolder.images03);imagesViewHolder.itemView.setOnClickListener(new View.OnClickListener() {@Override
                public void onClick(View v) {if (mOnItemClick != null) {mOnItemClick.onItemClick(position);}}});}}@Override
    public int getItemCount() {return list.size();}class NormalViewHolder extends RecyclerView.ViewHolder {private final TextView normal_title;private final ImageView normal_img;public NormalViewHolder(final View itemView) {super(itemView);normal_title = itemView.findViewById(R.id.normal_title);normal_img = itemView.findViewById(R.id.normal_img);normal_img.setOnClickListener(new View.OnClickListener() {@Override
                public void onClick(View v) {if (mOnItemClick != null) {mOnItemClick.onImageClick(v);}}});}}class ImagesViewHolder extends RecyclerView.ViewHolder {private final ImageView images01;private final ImageView images02;private final ImageView images03;private final TextView images_title;public ImagesViewHolder(View itemView) {super(itemView);images01 = itemView.findViewById(R.id.images01);images02 = itemView.findViewById(R.id.images02);images03 = itemView.findViewById(R.id.images03);images_title = itemView.findViewById(R.id.images_title);images01.setOnClickListener(new View.OnClickListener() {@Override
                public void onClick(View v) {if (mOnItemClick != null) {mOnItemClick.onImageClick(v);}}});images02.setOnClickListener(new View.OnClickListener() {@Override
                public void onClick(View v) {if (mOnItemClick != null) {mOnItemClick.onImageClick(v);}}});images03.setOnClickListener(new View.OnClickListener() {@Override
                public void onClick(View v) {if (mOnItemClick != null) {mOnItemClick.onImageClick(v);}}});}}interface OnItemClick {void onImageClick(View view);void onItemClick(int position);}private OnItemClick mOnItemClick;public void setOnItemClick(OnItemClick onItemClick) {this.mOnItemClick = onItemClick;}//删除
    public void deleteItem(int poistion) {list.remove(poistion);}
}
Main2Activity
package com.example.yuekaomoni1;import android.animation.ObjectAnimator;
import android.content.DialogInterface;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.view.View;
import android.widget.TextView;import com.example.yuekaomoni1.p.DataBeans;
import com.example.yuekaomoni1.p.DataPresenter;
import com.example.yuekaomoni1.p.DataPresenterImp;
import com.example.yuekaomoni1.p.RecyclerBean;
import com.example.yuekaomoni1.v.DataView;
import com.example.yuekaomoni1.v.IDataView;
import com.jcodecraeer.xrecyclerview.XRecyclerView;import java.util.List;public class Main2Activity extends AppCompatActivity implements DataView {private XRecyclerView mrecycleview;private DataPresenterImp dataPresenterImp;private List<DataBeans.DataBeanX.DataBean> list;private ShopRecyclerAdapter adapter;@Override
    protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main2);initview();LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);mrecycleview.setLayoutManager(linearLayoutManager);dataPresenterImp = new DataPresenterImp(this);dataPresenterImp.showData("1");}private void initview() {mrecycleview = findViewById(R.id.xrv);}@Override
    public void showData(List<DataBeans.DataBeanX.DataBean> list) {adapter = new ShopRecyclerAdapter(this, list);mrecycleview.addItemDecoration(new SpacesItemDecoration(10));mrecycleview.setAdapter(adapter);adapter.setOnItemClick(new ShopRecyclerAdapter.OnItemClick() {@Override
            public void onImageClick(View view) {ObjectAnimator alpha = ObjectAnimator.ofFloat(view, "alpha", new float[]{1f, 0.5f, 0.0f, 0.5f, 1.0f});alpha.setRepeatMode(ObjectAnimator.RESTART);alpha.setDuration(2000);alpha.setRepeatCount(0);alpha.start();}@Override
            public void onItemClick(int position) {//弹出框
                showAlertDialog(position);}});}private void showAlertDialog(final int position) {AlertDialog.Builder builder = new AlertDialog.Builder(Main2Activity.this);builder.setTitle("提示:");builder.setMessage("请问你要删除吗?");builder.setIcon(R.mipmap.ic_launcher_round);//点击对话框以外的区域是否让对话框消失
        builder.setCancelable(false);//设置正面按钮
        builder.setPositiveButton("是的", new DialogInterface.OnClickListener() {@Override
            public void onClick(DialogInterface dialog, int which) {adapter.deleteItem(position);adapter.notifyDataSetChanged();dialog.dismiss();}});//设置反面按钮
        builder.setNegativeButton("不是", new DialogInterface.OnClickListener() {@Override
            public void onClick(DialogInterface dialog, int which) {dialog.dismiss();}});AlertDialog dialog = builder.create();dialog.show();}@Override
    protected void onDestroy() {super.onDestroy();dataPresenterImp.cloneView();}
}

剩下的就是我們的子佈局文件了

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"><ImageView
        android:id="@+id/normal_img"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:src="@mipmap/ic_launcher" /><LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="3"
        android:orientation="vertical"><TextView
            android:id="@+id/normal_title"
            android:layout_width="wrap_content"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:text="ggggggggggggg"
            android:textSize="25sp" /><TextView
            android:layout_width="wrap_content"
            android:layout_height="0dp"
            android:layout_gravity="right"
            android:layout_weight="1"
            android:gravity="center"
            android:text="1256评论 120赞"
            android:textSize="25sp" /></LinearLayout></LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"><TextView
        android:id="@+id/images_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="ffffffffffffffff"
        android:textSize="25sp" /><LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="10dp"
        android:layout_marginTop="10dp"
        android:orientation="horizontal"><ImageView
            android:id="@+id/images01"
            android:layout_width="80dp"
            android:layout_height="80dp"
            android:layout_weight="1"
            android:src="@mipmap/ic_launcher" /><ImageView
            android:id="@+id/images02"
            android:layout_width="80dp"
            android:layout_height="80dp"
            android:layout_weight="1"
            android:src="@mipmap/ic_launcher" /><ImageView
            android:id="@+id/images03"
            android:layout_width="80dp"
            android:layout_height="80dp"
            android:layout_weight="1"
            android:src="@mipmap/ic_launcher" /></LinearLayout><TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="1256评论 120赞"
        android:textSize="25sp" /></LinearLayout>
依赖
dependencies {implementation fileTree(include: ['*.jar'], dir: 'libs')implementation 'com.android.support:appcompat-v7:27.1.1'
    implementation 'com.android.support.constraint:constraint-layout:1.1.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    implementation 'com.squareup.okhttp3:okhttp:3.10.0'
    implementation 'com.squareup.okhttp3:logging-interceptor:3.10.0'
    implementation 'com.github.bumptech.glide:glide:4.7.1'
    annotationProcessor 'com.github.bumptech.glide:compiler:4.7.1'
    implementation 'com.google.code.gson:gson:2.2.4'
    compile 'com.jcodecraeer:xrecyclerview:1.5.9'
    implementation 'com.android.support:design:27.1.1'
    implementation 'com.squareup.okhttp:okhttp:2.0.0'
}

Android:MVP模式+XRecycleView+OKHttp+自定義梯形佈局相关推荐

  1. Android MVP模式 简单易懂的介绍方式

    主要学习这位大神的博客:简而易懂 Android MVP模式 简单易懂的介绍方式 https://segmentfault.com/a/1190000003927200 转载于:https://www ...

  2. Android MVP模式简单易懂的介绍方式 (一)

    Android MVP模式简单易懂的介绍方式 (一) Android MVP模式简单易懂的介绍方式 (二) Android MVP模式简单易懂的介绍方式 (三) 最近正在研究Android的MVP模式 ...

  3. android mvp模式例子_ANDROID MVP 模式 简单易懂的介绍方式

    Android MVP Pattern Android MVP 模式1 也不是什么新鲜的东西了,我在自己的项目里也普遍地使用了这个设计模式.当项目越来越庞大.复杂,参与的研发人员越来越多的时候,MVP ...

  4. Android MVP模式 解析JSON 显示到ListView上

    Android MVP模式 解析JSON 显示到ListView上 有关MVP模式的介绍,这里不作详细解释,稍后会更新MVP设计模式,请等待链接-- 简述本次的主要功能实现: 通过mvp设计模式,(M ...

  5. android mvp 利弊,android mvp模式有什么弊端 - 什么是android mvp模式,android mvp模式有什么弊端...

    android mvp模式有什么弊端 才开始学习使用MVP时,看到大家说了很多MVP的优点,代码复用,条理清晰等等.不过我改下来发现,MVP在我看来,最大的优点还是代码解耦,逻辑清晰,至于代码复用,暂 ...

  6. Android MVP模式学习

    Android MVP模式学习 参考: Android MVP 开发模式有哪些优缺点?: https://www.zhihu.com/question/35185744 MVP 模式简单易懂的介绍方式 ...

  7. Android MVP模式就是这么回事儿

    MVP模式 概念就不说了,大家都懂.View层通过Persenter层相互通信,避免了View中大量的业务代码,而将其提取到Model中.其实简单的来说,就是通过接口回调,把业务分离出去.提高代码的可 ...

  8. android mvp模式

    越来越多人讨论mvp模式,mvp在android应用开发中获得更多的重视,这里说一下对MVP的简单了解. 什么是 MVP? MVP模式使逻辑从视图层分开,目的是我们在屏幕上怎么表现,和界面如何工作的所 ...

  9. Xamarin.Android MVP模式

    一.简介 随着UI创建技术的功能日益增强,UI层也履行着越来越多的职责.为了更好地细分视图(View)与模型(Model)的功能,让View专注于处理数 据的可视化以及与用户的交互,同时让Model只 ...

最新文章

  1. html编写app页面代码,编写html页面代码需要了解的--综合编
  2. python使用符号#表示单行注释-Pyhton中单行和多行注释的使用方法及规范
  3. Linux系统的进程管理
  4. Python的setuptools详解【2】find_packages()
  5. java打包后发布找不到jsp_eclipse中web项目部署以后jsp的java文件找不到问题(Tomcat配置serverlocations)...
  6. 自定义PopupWindow弹出后背景灰色状态
  7. 为什么我要用C写游戏 适合自己的才是最好的
  8. Spring点滴二:Spring Bean
  9. java怎么把文件写入到usb里_如何创建PowerShell脚本以将文件复制到USB闪存驱动器?...
  10. 工作263:弹性布局 修改样式
  11. 面试必备:synchronized的底层原理?
  12. 【人脸识别】LFW数据集介绍
  13. 卸载idea2020删除以前的配置_推荐一款只有5M大小的绿色良心的卸载工具!
  14. 【MySQL】源码安装MySQL
  15. (转)(VS2013 )由于应用程序配置不正确,程序未能启动”--原因及解决方法...
  16. C# WPF ASP.net 上传多文件和数据
  17. WEB架构师成长之路 二
  18. 软件测试简历,这一点你是否漏掉
  19. 场效应管 - MOSFET
  20. linux数据库12c安装图解,Linux + Oracle 12c RAC安装配置详细记录过程_图文并茂.pdf

热门文章

  1. %5B0%5D表示什么意思
  2. 华为欧拉EulerOS修改网卡名字
  3. OSChina 周四乱弹 —— 又是我运维背锅
  4. 合服操作 first
  5. As second twin awaits kidney donor, rural Washington family can only wait
  6. 【强化学习与机器人控制论文 1】基于深度强化学习的机械臂避障
  7. Codeforces 1179 D - Fedor Runs for President
  8. 7-1 单词首字母大写
  9. django+拉勾网招聘数据可视化
  10. uWSGI日志每日分割