第二周

//MainActivity类 


package com.wzq.zhoutkao2_demo;



import android.os.Bundle;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;


import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;


/**
 * tablayout
 * viewpager +Adapter
 * ImagerLoader
 * AsyncTask+网络请求+gson
 * XListView
 *
 */
public class MainActivity extends AppCompatActivity {
    private TabLayout tabLayout;
    private ViewPager viewPager;
    ArrayList<Fragment> fragmentList = new ArrayList<Fragment>();


//    String url = "http://gank.io/api/data/Android/10/1";
    String baseUrl = "http://gank.io/api/data/";
    String[] string={"福利","Android","iOS","休息视频","拓展资源","前端","all"};
    private List<String> titleList;//这个是标题的集合


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tabLayout = (TabLayout) findViewById(R.id.tabLayout);
        viewPager = (ViewPager) findViewById(R.id.viewPager);
        titleList = Arrays.asList(string);
        for (int i = 0; i < titleList.size(); i++) {
            //URLEncoder.encode这个方法对中文进行转义;
            String urlTemp = baseUrl+ URLEncoder.encode(titleList.get(i));
            BlankFragment fragment = BlankFragment.getInstances(urlTemp);
            fragmentList.add(fragment);
        }
        viewPager.setAdapter(new MPagerAdapter(getSupportFragmentManager()));
        //tablayout的标题的显示模式
        tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);
        tabLayout.setupWithViewPager(viewPager);
    }




    class  MPagerAdapter extends FragmentPagerAdapter {


        public MPagerAdapter(FragmentManager fm) {
            super(fm);
        }


        @Override
        public Fragment getItem(int position) {
            return fragmentList.get(position);
        }


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


        //需要重写个返回标题的方法;
        @Override
        public CharSequence getPageTitle(int position) {
            return titleList.get(position);
        }
    }

}


BlankFragment 类

package com.wzq.zhoutkao2_demo;


import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;


import com.bwie.xlistviewlibrary.View.XListView;
import com.bwie.xlistviewlibrary.utils.NetWordUtils;
import com.google.gson.Gson;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;


import java.util.ArrayList;
import java.util.List;


/**
 * 一定要注册xListview的监听回调
 */
public class BlankFragment extends Fragment implements XListView.IXListViewListener {


    private String url;
    private XListView xListView;
    ArrayList<Product.ResultsBean> list = new ArrayList<Product.ResultsBean>();


    int page = 1;
    private MAdapter mAdapter;
    private ImageLoader imageLoaderInstance;


    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = View.inflate(getActivity(), R.layout.frag1, null);
        xListView = view.findViewById(R.id.xlv);
        return view;
    }


    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        Bundle bundle = getArguments();
        url = bundle.getString("url");
        imageLoaderInstance = ImageLoader.getInstance();
        mAdapter = new MAdapter();
        xListView.setAdapter(mAdapter);//设置listview的适配器;
        getNetData(1);//获取网络数据
        xListView.setXListViewListener(this);
        xListView.setPullLoadEnable(true);//设置可以加载更多;


    }


    public static BlankFragment getInstances(String url) {
        BlankFragment blankFragment = new BlankFragment();
        Bundle bundle = new Bundle();
        bundle.putString("url", url);
        blankFragment.setArguments(bundle);
        return blankFragment;


    }


    private void getNetData(int pagerTemp) {
        new MAsyncTask().execute(url + "/10/" + pagerTemp);
    }


    @Override
    public void onRefresh() {


        list.clear();
        getNetData(1);
        UiComplete();


    }




    @Override
    public void onLoadMore() {
        getNetData(page++);
        UiComplete();
    }


    public void UiComplete() {
        xListView.stopRefresh();
        xListView.stopLoadMore();
        xListView.setRefreshTime("刚刚");
    }


    /**
     * 创建异步任务类
     * 第一个泛型---是传递过来的接口地址
     * 第二个参数是 请求接口的进度
     * 第三个参数是 异步任务处理完返回的数据
     */
    class MAsyncTask extends AsyncTask<String, Void, String> {
        public MAsyncTask() {
            super();
        }


        /**
         * String... strings  这个参数是可变参数;
         * 这个方法运行在子线程,去请求网络;
         */
        @Override
        protected String doInBackground(String... strings) {
            String url = strings[0];
            String netjson = NetWordUtils.getNetjson(url);
            //把从网络请求的json返回回去;
            Log.e("wzq", "doInBackground: " + netjson);
            return netjson;
        }




        /**
         * 这个方法接收的参数s, 就是doInBackground返回的值;
         * 这个方法是在主线程运行,可以更新ui;
         *
         * @param s
         */
        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            Gson gson = new Gson();
            Product product = gson.fromJson(s, Product.class);
            List<Product.ResultsBean> results = product.getResults();
            list.addAll(results);
            mAdapter.notifyDataSetChanged();


        }
    }




    class MAdapter extends BaseAdapter {




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


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


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


        @Override
        public View getView(int i, View view, ViewGroup viewGroup) {
            View viewItem = View.inflate(getActivity(), R.layout.listview, null);
            TextView textView = (TextView) viewItem.findViewById(R.id.textView);
            ImageView imageView = (ImageView) viewItem.findViewById(R.id.imageView);
            textView.setText(list.get(i).getDesc());
            DisplayImageOptions options = new DisplayImageOptions.Builder()
                    .bitmapConfig(Bitmap.Config.RGB_565) // default 设置图片的解码类型
                    .build();
            imageLoaderInstance.displayImage(list.get(i).getUrl(), imageView,options);


            return viewItem;
        }
    }




}



//MApp类

package com.wzq.zhoutkao2_demo;


import android.app.Application;


import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;




/**
 * author:Created by WangZhiQiang on 2017-10-10.
 * 系统启动 会先运行这个MApp,所以我们在这里进行初始化 框架 组件等等;
 */


public class MApp extends Application{


    @Override
    public void onCreate() {
        super.onCreate();


        //初始化组件
        ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this).build();
        ImageLoader.getInstance().init(configuration);


    }
}



//bean类

package com.wzq.zhoutkao2_demo;


import java.util.List;


/**
 * author:Created by WangZhiQiang on 2017-10-13.
 */


public class Product {




    /**
     * error : false
     * results : [{"_id":"59dc7149421aa94e07d18490","createdAt":"2017-10-10T15:05:45.902Z","desc":"使用 Kotlin 实现的一个 Dribbble 客户端","images":["http://img.gank.io/05d6552f-97ba-4d52-ad33-3caeba5cb327","http://img.gank.io/84594f1b-d10e-42a3-afc1-c7d2bf9ac0cf"],"publishedAt":"2017-10-11T12:40:42.545Z","source":"web","type":"Android","url":"https://github.com/armcha/Ribble","used":true,"who":" Thunder Bouble"},{"_id":"59dcca81421aa94e0053bddf","createdAt":"2017-10-10T21:26:25.797Z","desc":"最近在给某某银行做项目的时,涉及到了数据埋点,性能监控等问题,那我们起先想到的有两种方案,方案之一就是借助第三方,比如友盟、Bugly等,由于项目是部署在银行的网络框架之内的,所以该方案不可行。","publishedAt":"2017-10-11T12:40:42.545Z","source":"web","type":"Android","url":"https://mp.weixin.qq.com/s?__biz=MzIyMjQ0MTU0NA==&mid=2247484445&idx=1&sn=8eef04a7932b58ef0012643db228fb32&chksm=e82c3d3adf5bb42c88333160a88c7b05fb5f45798434afa956fe1f1a58c7713ef121c7ea0af4&scene=0&key=7460e137ddd94f92f668e812cfc0aef8fde2bdf7943c7409875cce12a3baed3526f31e4a707ed86896ee8ddbbf761bb2f09b2d7406c3b9016589495240d835d967a2141231c43d084635a7df11647fb0&ascene=0&uin=MjMzMzgwOTEwMQ%3D%3D&devicetype=iMac+MacBookPro12%2C1+OSX+OSX+10.10.5+build(14F27)&version=11020201&pass_ticket=54ym37fDoXgDZm7nzjGt6KNDR9%2F9ZIU8%2Bo5kNcGEXqi8GKijls6et5TXcXxbERi%2F","used":true,"who":"Tamic (码小白)"},{"_id":"59dd6bde421aa90fe50c0151","createdAt":"2017-10-11T08:54:54.500Z","desc":"这可能是世界上最小的 Android APK,作者教你如何疯狂缩小 APK 体积。","publishedAt":"2017-10-11T12:40:42.545Z","source":"chrome","type":"Android","url":"https://fractalwrench.co.uk/posts/playing-apk-golf-how-low-can-an-android-app-go/","used":true,"who":"代码家"},{"_id":"59dd7794421aa90fef20346d","createdAt":"2017-10-11T09:44:52.573Z","desc":"Jenkins实现自动化打包并集成fir平台(超详细)","publishedAt":"2017-10-11T12:40:42.545Z","source":"web","type":"Android","url":"https://mp.weixin.qq.com/s?__biz=MzIwMzYwMTk1NA==&mid=2247487305&idx=1&sn=e9bdff7cb91b0eabbe67ec965f3be660","used":true,"who":"陈宇明"},{"_id":"59db479d421aa94e032b1ea6","createdAt":"2017-10-09T17:55:41.830Z","desc":"Kotlin 语言下设计模式的不同实现","publishedAt":"2017-10-10T12:41:34.882Z","source":"web","type":"Android","url":"http://johnnyshieh.me/posts/kotlin-design-pattern-impl/","used":true,"who":"Johnny Shieh"},{"_id":"59db4f71421aa94e04c2adc4","createdAt":"2017-10-09T18:29:05.420Z","desc":"Kotlin 1.2 Beta 发布了","publishedAt":"2017-10-10T12:41:34.882Z","source":"web","type":"Android","url":"https://mp.weixin.qq.com/s/INbaqAjjY5AlmGvKg7_6pw","used":true,"who":" Thunder Bouble"},{"_id":"59db52ab421aa94e032b1ea7","createdAt":"2017-10-09T18:42:51.991Z","desc":"一个用 Kotlin 实现的简单 Material design 的\u201c滑动解锁\u201d小部件","publishedAt":"2017-10-10T12:41:34.882Z","source":"web","type":"Android","url":"https://github.com/cortinico/slidetoact","used":true,"who":" Thunder Bouble"},{"_id":"59db6938421aa94e0053bdd9","createdAt":"2017-10-09T20:19:04.768Z","desc":"See what the GitHub community is most excited about today.","images":["http://img.gank.io/daf8a302-11e2-45a5-a54b-448b7847fba0"],"publishedAt":"2017-10-10T12:41:34.882Z","source":"web","type":"Android","url":"https://github.com/Werb/G-Trending","used":true,"who":"Werb"},{"_id":"59dc3296421aa94e07d1848d","createdAt":"2017-10-10T10:38:14.886Z","desc":"Android 彻底组件化 demo 发布","publishedAt":"2017-10-10T12:41:34.882Z","source":"web","type":"Android","url":"http://mp.weixin.qq.com/s/aWUixHMhU8g0W4dapr0HPg","used":true,"who":null},{"_id":"59dc4dd0421aa94e07d1848e","createdAt":"2017-10-10T12:34:24.701Z","desc":"Android 展开型布局菜单。","images":["http://img.gank.io/b39a4adf-b48a-4f2e-990f-b672027bf643","http://img.gank.io/a7b25e90-63ba-4703-bd6c-dc4483fa5172"],"publishedAt":"2017-10-10T12:41:34.882Z","source":"chrome","type":"Android","url":"https://github.com/iammert/ScalingLayout","used":true,"who":"代码家"}]
     */


    private boolean error;
    private List<ResultsBean> results;


    public boolean isError() {
        return error;
    }


    public void setError(boolean error) {
        this.error = error;
    }


    public List<ResultsBean> getResults() {
        return results;
    }


    public void setResults(List<ResultsBean> results) {
        this.results = results;
    }


    public static class ResultsBean {
        /**
         * _id : 59dc7149421aa94e07d18490
         * createdAt : 2017-10-10T15:05:45.902Z
         * desc : 使用 Kotlin 实现的一个 Dribbble 客户端
         * images : ["http://img.gank.io/05d6552f-97ba-4d52-ad33-3caeba5cb327","http://img.gank.io/84594f1b-d10e-42a3-afc1-c7d2bf9ac0cf"]
         * publishedAt : 2017-10-11T12:40:42.545Z
         * source : web
         * type : Android
         * url : https://github.com/armcha/Ribble
         * used : true
         * who :  Thunder Bouble
         */


        private String _id;
        private String createdAt;
        private String desc;
        private String publishedAt;
        private String source;
        private String type;
        private String url;
        private boolean used;
        private String who;
        private List<String> images;


        public String get_id() {
            return _id;
        }


        public void set_id(String _id) {
            this._id = _id;
        }


        public String getCreatedAt() {
            return createdAt;
        }


        public void setCreatedAt(String createdAt) {
            this.createdAt = createdAt;
        }


        public String getDesc() {
            return desc;
        }


        public void setDesc(String desc) {
            this.desc = desc;
        }


        public String getPublishedAt() {
            return publishedAt;
        }


        public void setPublishedAt(String publishedAt) {
            this.publishedAt = publishedAt;
        }


        public String getSource() {
            return source;
        }


        public void setSource(String source) {
            this.source = source;
        }


        public String getType() {
            return type;
        }


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


        public String getUrl() {
            return url;
        }


        public void setUrl(String url) {
            this.url = url;
        }


        public boolean isUsed() {
            return used;
        }


        public void setUsed(boolean used) {
            this.used = used;
        }


        public String getWho() {
            return who;
        }


        public void setWho(String who) {
            this.who = who;
        }


        public List<String> getImages() {
            return images;
        }


        public void setImages(List<String> images) {
            this.images = images;
        }
    }
}




布局文件

//listview类

<?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"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        app:srcCompat="@mipmap/ic_launcher" />


    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="TextView" />
</LinearLayout>







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">


    <android.support.design.widget.TabLayout
        android:id="@+id/tabLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />


    <android.support.v4.view.ViewPager
        android:id="@+id/viewPager"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />




</LinearLayout>



//frag1

<?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">


    <com.bwie.xlistviewlibrary.View.XListView
        android:id="@+id/xlv"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>


</LinearLayout>




//清单文件

apply plugin: 'com.android.application'


android {
    compileSdkVersion 26
    buildToolsVersion "26.0.1"


    defaultConfig {
        applicationId "com.wzq.zhoutkao2_demo"
        minSdkVersion 15
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"


        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"


    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}


dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:26.+'
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    testCompile 'junit:junit:4.12'
    compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
    compile 'com.android.support:design:26+'
    compile 'com.google.code.gson:gson:2.2.4'
    compile project(':xlistviewlibrary')
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值