封装Activity基类+侧边栏+导航栏+轮播图+Async网络请求+Gson解析+多个ViewPage与Fragment=首页面

1.导包+依赖+Xlistview插件

 compile 'com.google.code.gson:gson:2.2.4'

   <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
   <uses-permission android:name="android.permission.INTERNET"></uses-permission>

   <application
          android:name="com.example.app.imageloader"

2.布局页面

activity_main.xml页面

<?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:orientation="vertical"
    android:layout_height="match_parent"
    tools:context="com.example.day11tablayout06.MainActivity">
    <android.support.v4.widget.DrawerLayout
        android:id="@+id/draw_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <LinearLayout
            android:layout_width="match_parent"
            android:orientation="vertical"
            android:layout_height="match_parent">
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_weight="1"
                android:background="#ccc"
                android:orientation="horizontal"
                android:layout_height="0dp">
                <ImageView
                    android:id="@+id/img01"
                    android:src="@mipmap/ic_launcher"
                    android:layout_width="70dp"
                    android:layout_height="70dp" />
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:textSize="20sp"
                    android:layout_marginLeft="130dp"
                    android:text="欢迎进入页面" />
            </LinearLayout>
          <android.support.v4.view.ViewPager
              android:id="@+id/view_page"
              android:layout_weight="6"
              android:layout_width="match_parent"
              android:layout_height="0dp"/>
            <RadioGroup
                android:id="@+id/rap"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:orientation="horizontal"
                android:layout_weight="1"
                >
                <RadioButton
                    android:id="@+id/rap1"
                    android:layout_weight="1"
                    android:text="首页"
                    android:background="@drawable/xuanze"
                    android:checked="true"
                    android:button="@null"
                    android:textSize="20sp"
                    android:gravity="center"
                    android:layout_width="0dp"
                    android:layout_height="match_parent" />
                <RadioButton
                    android:id="@+id/rap2"
                    android:layout_weight="1"
                    android:text="附近"
                    android:background="@drawable/xuanze"
                    android:button="@null"
                    android:textSize="20sp"
                    android:layout_width="0dp"
                    android:gravity="center"
                    android:layout_height="match_parent" />
                <RadioButton
                    android:id="@+id/rap3"
                    android:layout_weight="1"
                    android:text="发现"
                    android:background="@drawable/xuanze"
                    android:button="@null"
                    android:textSize="20sp"
                    android:layout_width="0dp"
                    android:gravity="center"
                    android:layout_height="match_parent" />
                <RadioButton
                    android:id="@+id/rap4"
                    android:layout_weight="1"
                    android:text="订单"
                    android:background="@drawable/xuanze"
                    android:button="@null"
                    android:textSize="20sp"
                    android:gravity="center"
                    android:layout_width="0dp"
                    android:layout_height="match_parent" />
                <RadioButton
                    android:id="@+id/rap5"
                    android:layout_weight="1"
                    android:text="我的"
                    android:background="@drawable/xuanze"
                    android:gravity="center"
                    android:button="@null"
                    android:textSize="20sp"
                    android:layout_width="0dp"
                    android:layout_height="match_parent" />
            </RadioGroup>
        </LinearLayout>
        <LinearLayout
            android:layout_width="260dp"
            android:orientation="vertical"
            android:layout_gravity="start"
            android:background="#fccc"
            android:layout_height="match_parent">
            <TextView
                android:text="侧拉页面"
                android:textSize="25sp"
                android:gravity="center"
                android:layout_width="match_parent"
                android:layout_height="match_parent" />
        </LinearLayout>
    </android.support.v4.widget.DrawerLayout>
</LinearLayout>
include1页面

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/img01"
        android:src="@drawable/ic_launcher"
        android:layout_width="100dp"
        android:layout_height="100dp" />
    <TextView
        android:id="@+id/title1"
        android:text="title1"
        android:textSize="20sp"
        android:layout_toRightOf="@id/img01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</RelativeLayout>
frag1.xml页面

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:layout_height="match_parent">

    <com.example.d.viewpage
        android:id="@+id/view_page01"
        android:layout_width="match_parent"
        android:layout_weight="4"
        android:layout_height="0dp"/>
    <view.XListView
        android:id="@+id/x_listview"
        android:layout_width="match_parent"
        android:layout_weight="6"
        android:layout_height="0dp"/>
</LinearLayout>
frag2,3,4,5,xlistview_footer,xlistview_header,strings.xml,页面不变

selector页面

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:state_checked="true" android:drawable="@color/colorPrimaryDark"/>
   <item android:state_checked="false" android:drawable="@color/colorAccent"/>
</selector>

3.写BaseActivity页面

package com.example.day11tablayout06;

import android.os.Bundle;

import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;

/**
 * Created by lenovo on 2018/7/22.
 */

public abstract class BaseActivity extends AppCompatActivity {//abstract 不提示,自己手动添加

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {//里面传的参数只有一个,不要传错,不然不显示布局
        super.onCreate(savedInstanceState);
        setContentView(getlayoutId());
        initview();
        getdata();
    }

    protected abstract int getlayoutId();//创建方法有三种,导abstract这法,而且三个方法顺序不可变

    protected abstract void initview();

    protected abstract void getdata();


}
 

4.写MainActivity页面,继承BaseActivity

package com.example.day11tablayout06;

import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.widget.ImageView;
import android.widget.RadioGroup;
import android.widget.Toast;

import com.example.adapter.myadapter;
import com.example.fragfment.frag1;
import com.example.fragfment.frag2;
import com.example.fragfment.frag3;
import com.example.fragfment.frag4;
import com.example.fragfment.frag5;

import java.util.ArrayList;

public class MainActivity extends BaseActivity{//删除原oncreat方法,调用BaseActivity的方法


    private DrawerLayout draw_layout;
    private ImageView img01;
    private ViewPager view_page;
    private RadioGroup rap;

    @Override
    protected int getlayoutId() {
        return R.layout.activity_main;//加载默认布局,不提示,自己手动添加
    }

    @Override
    protected void initview() {
        draw_layout = findViewById(R.id.draw_layout);
        img01 = findViewById(R.id.img01);
        rap = findViewById(R.id.rap);
        view_page = findViewById(R.id.view_page);
    }

    @Override
    protected void getdata() {
       //创建fragment对象
        frag1 frag1 = new frag1();
        frag2 frag2 = new frag2();
        frag3 frag3 = new frag3();
        frag4 frag4 = new frag4();
        frag5 frag5 = new frag5();
        ArrayList<Fragment> list = new ArrayList<>();
        list.add(frag1);
        list.add(frag2);
        list.add(frag3);
        list.add(frag4);
        list.add(frag5);
        myadapter myadapter = new myadapter(getSupportFragmentManager(),list);
        view_page.setAdapter(myadapter);
        view_page.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {
                 rap.check(rap.getChildAt(position).getId());
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });
        img01.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                draw_layout.openDrawer(Gravity.LEFT);
            }
        });
        //侧滑监听,自己写打印的方法
       draw_layout.setDrawerListener(new DrawerLayout.DrawerListener() {
           @Override
           public void onDrawerSlide(View drawerView, float slideOffset) {

           }

           @Override
           public void onDrawerOpened(View drawerView) {
               Log.i("xxx","打开了侧滑页面");
           }

           @Override
           public void onDrawerClosed(View drawerView) {
               Log.i("xxx","关闭了侧滑页面");
           }

           @Override
           public void onDrawerStateChanged(int newState) {

           }
       });
       rap.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
           @Override
           public void onCheckedChanged(RadioGroup radioGroup, int i) {
               switch (i){
                   case R.id.rap1:
                       view_page.setCurrentItem(0);
                       break;
                   case R.id.rap2:
                       view_page.setCurrentItem(1);
                       break;
                   case R.id.rap3:
                       view_page.setCurrentItem(2);
                       break;
                   case R.id.rap4:
                       view_page.setCurrentItem(3);
                       break;
                   case R.id.rap5:
                       view_page.setCurrentItem(4);
                       break;
                   default:
                       break;
               }
           }
       });
    }
}
 

5.写HttpUtils 回调页面

package com.example.utils;

import android.os.AsyncTask;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.PublicKey;

/**
 * Created by lenovo on 2018/7/22.
 */

public class HttpUtils {
    private  getdatajsonlisten getdatajsonlisten;
    private static   HttpUtils httpUtils;
    public  static  HttpUtils getinstance(){
        if(httpUtils==null){
            httpUtils =new HttpUtils();
        }
        return  httpUtils;
    }
    public  void  getdata(String url){
        Myasync myasync = new Myasync();
        myasync.execute(url);
    }
    public  class   Myasync extends AsyncTask<String,Integer,String>{

        @Override
        protected String doInBackground(String... params) {
            try {
                String path =params[0];
                URL url = new URL(path);
                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                connection.setConnectTimeout(5000);
                connection.setReadTimeout(5000);
                connection.setRequestMethod("GET");
                if(connection.getResponseCode()==200){
                    InputStream inputStream = connection.getInputStream();
                    ByteArrayOutputStream bos = new ByteArrayOutputStream();
                    byte[] bytes = new byte[1024];
                    int len =0;
                    while ((len=inputStream.read(bytes))!=-1){
                        bos.write(bytes,0,len);
                    }
                    inputStream.close();
                    bos.close();
                    String json = bos.toString();
                    return  json;
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            getdatajsonlisten.datajson1(s);
        }
    }
    public interface  getdatajsonlisten{
         public  void  datajson1(String json);
    }
    public  void  setdatajsonlisten(getdatajsonlisten getdatajsonlisten){
          this.getdatajsonlisten =getdatajsonlisten;
    }
}
 

6.写app下的imageloader页面

package com.example.app;

import android.app.Application;

import com.bwei.imageloaderlibrary.utils.ImageLoaderUtils;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;

/**
 * Created by lenovo on 2018/7/22.
 */

public class imageloader extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        ImageLoaderConfiguration configuration = ImageLoaderUtils.getConfiguration(this);
        ImageLoader.getInstance().init(configuration);
    }
}
 

7.写bean包,两个网络获取接口的数据

8.写viewpage页面,为了防止两个viewpager冲突,自定义的页面里面的viewpager

package com.example.d;

import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;

/**
 * Created by lenovo on 2018/7/22.
 */

public class viewpage extends ViewPager{
    public viewpage(Context context) {
        super(context);
    }

    public viewpage(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected boolean dispatchGenericFocusedEvent(MotionEvent event) {//方法自己手动添加dispatchGenericFocusedEvent
        return super.dispatchGenericFocusedEvent(event);
    }
}

9.写fragfment1页面,里面有轮播,xlistview解析

package com.example.fragfment;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewParent;
import android.widget.ImageView;

import com.bwei.imageloaderlibrary.utils.ImageLoaderUtils;
import com.example.adapter.adapter;
import com.example.adapter.my1adapter;
import com.example.bean.news;
import com.example.bean.news1;
import com.example.day11tablayout06.R;
import com.example.utils.HttpUtils;
import com.google.gson.Gson;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import view.XListView;

/**
 * Created by lenovo on 2018/7/22.
 */

public class frag1 extends Fragment {
    private  String path="http://www.xieast.com/api/news/news.php?page=";
    private  int page =1;
    private  adapter adapter;
    private   my1adapter my1adapter;
    private View view;
    private ViewPager view_page01;
    private  List<com.example.bean.news1.DataBean> list1 =new ArrayList<>();
    private XListView x_listview;
    private  List<ImageView> list =new ArrayList<>();
    private Handler handler =new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if(msg.what==0){
                String json =(String)msg.obj;
                getjsondata(json);
            }else if(msg.what==1){
                int i = view_page01.getCurrentItem();
                i++;
                view_page01.setCurrentItem(i);
                handler.sendEmptyMessageDelayed(1,1000);
            }
        }
    };

    private void getjsondata(String json) {
        Gson gson = new Gson();
        news news = gson.fromJson(json, news.class);
        List<com.example.bean.news.DataBean> data = news.getData();
        for (int i = 0; i <data.size() ; i++) {
            String s = data.get(i).getImg();
            ImageView imageView = new ImageView(getActivity());
            DisplayImageOptions options = ImageLoaderUtils.getOptions();
            ImageLoader.getInstance().displayImage(s,imageView,options);
            list.add(imageView);
        }
        adapter = new adapter(getActivity(),list);
        view_page01.setAdapter(adapter);

    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
       if(view ==null){
       view = inflater.inflate(R.layout.frag1, container, false);
       }
        ViewGroup parent = (ViewGroup)view.getParent();
       if(parent!=null){
           parent.removeView(view);
       }
        view_page01 = view.findViewById(R.id.view_page01);
        x_listview = view.findViewById(R.id.x_listview);
        getservices();
        getfronid();
        getfromdatanet();
        return view;
    }

    private void getfronid() {
        x_listview.setPullRefreshEnable(true);
        x_listview.setPullLoadEnable(true);
        x_listview.setXListViewListener(new XListView.IXListViewListener() {
            @Override
            public void onRefresh() {
                page=1;
                getfromdatanet();
            }

            @Override
            public void onLoadMore() {
                page+=1;
                getfromdatanet();
            }
        });
        //写适配器
         my1adapter = new my1adapter(getActivity(),list1);
        x_listview.setAdapter(my1adapter);
    }

    private void getfromdatanet() {
        String url =path+page;
        HttpUtils httpUtils = HttpUtils.getinstance();
        httpUtils.getdata(url);
        httpUtils.setdatajsonlisten(new HttpUtils.getdatajsonlisten() {
            @Override
            public void datajson1(String json) {
                Gson gson = new Gson();
                news1 news1 = gson.fromJson(json, news1.class);
                List<com.example.bean.news1.DataBean> data1 = news1.getData();
                if(page==1){
                    list1.clear();
                }
                list1.addAll(data1);
                //适配器刷新
              my1adapter.notifyDataSetChanged();
                if(page==1){
                    x_listview.stopRefresh();
                }else {
                    x_listview.stopLoadMore();
                }
            }
        });

    }

    private void getservices() {
        new Thread(){
            @Override
            public void run() {
                super.run();
                String path="http://www.xieast.com/api/banner.php";
                try {
                    URL url = new URL(path);
                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                    connection.setConnectTimeout(5000);
                    connection.setReadTimeout(5000);
                    connection.setRequestMethod("GET");
                    if(connection.getResponseCode()==200){
                        InputStream inputStream = connection.getInputStream();
                        ByteArrayOutputStream bos = new ByteArrayOutputStream();
                        byte[] bytes = new byte[1024];
                        int len =0;
                        while ((len=inputStream.read(bytes))!=-1){
                            bos.write(bytes,0,len);
                        }
                        inputStream.close();
                        bos.close();
                        String json = bos.toString();
                        Message message = new Message();
                        message.what=0;
                        message.obj=json;
                        handler.sendMessage(message);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }


            }
        }.start();

    }

    @Override
    public void onResume() {
        super.onResume();
        handler.sendEmptyMessageDelayed(1,1000);
    }

    @Override
    public void onPause() {
        super.onPause();
        handler.removeCallbacksAndMessages(null);
    }
}
 

10.写Fragment 2,3,4,5页面相同

package com.example.fragfment;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.example.day11tablayout06.R;

/**
 * Created by lenovo on 2018/7/22.
 */

public class frag2 extends Fragment {
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.frag2, container, false);
        return view;
    }
}


11.写adapter页面,轮播的适配器

package com.example.adapter;

import android.content.Context;
import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;

import java.util.List;

/**
 * Created by lenovo on 2018/7/22.
 */

public class adapter extends PagerAdapter {
    private Context context;
    private List<ImageView> list;

    public adapter(Context context, List<ImageView> list) {
        this.context = context;
        this.list = list;
    }

    @Override
    public int getCount() {
        return Integer.MAX_VALUE;
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view==object;
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        ImageView imageView = list.get(position % list.size());
        imageView.setScaleType(ImageView.ScaleType.FIT_XY);
        container.addView(imageView);
        return  imageView;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView((View) object);
    }
}
 

12.写adapter,这是导航栏的Fragment

package com.example.adapter;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

import java.util.List;

/**
 * Created by lenovo on 2018/7/22.
 */

public class myadapter extends FragmentPagerAdapter {
    private List<Fragment> list;

    public myadapter(FragmentManager fm, List<Fragment> list) {
        super(fm);
        this.list = list;
    }

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

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

13.写adapter,这是xlistview的适配器

package com.example.adapter;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.example.bean.news1;
import com.example.day11tablayout06.R;
import com.nostra13.universalimageloader.core.ImageLoader;

import java.util.List;

/**
 * Created by lenovo on 2018/7/22.
 */

public class my1adapter extends BaseAdapter {
    private Context context;
    private List<com.example.bean.news1.DataBean> list;

    public my1adapter(Context context, List<news1.DataBean> list) {
        this.context = context;
        this.list = list;
    }

    @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 convertView, ViewGroup viewGroup) {
        viewholder h =null;
        if(convertView==null){
            convertView= View.inflate(context, R.layout.include1, null);
            h =new viewholder();
            h.title1 = convertView.findViewById(R.id.title1);
            h.img01 = convertView.findViewById(R.id.img01);
            convertView.setTag(h);
        }else {
            h = (viewholder) convertView.getTag();
        }
        h.title1.setText(list.get(i).getTitle());
        ImageLoader.getInstance().displayImage(list.get(i).getThumbnail_pic_s(),h.img01);
        return convertView;
    }
    public  class viewholder{
        TextView title1;
        ImageView img01;
    }
}
 

猜你喜欢

转载自blog.csdn.net/QQ849410011/article/details/81157816
今日推荐