侧拉+TabLayout+轮播+XListView

来源:互联网 发布:浙江大数据交易中心 编辑:程序博客网 时间:2024/06/05 20:30

drawable文件夹下

rb_selecter

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

主布局文件夹下添加view文件夹

在strings.xml里添加

<string name="hello">Hello World, XListViewActivity!</string>
    <string name="xlistview_header_hint_normal">下拉刷新</string>
    <string name="xlistview_header_hint_ready">松开刷新数据</string>
    <string name="xlistview_header_hint_loading">正在加载...</string>
    <string name="xlistview_header_last_time">上次更新时间:</string>
    <string name="xlistview_footer_hint_normal">查看更多</string>
    <string name="xlistview_footer_hint_ready">松开载入更多</string>

清单文件

compile 'com.android.support:design:26.0.0-alpha1'compile files('libs/universal-image-loader-1.9.3-with-sources.jar')compile files('libs/gson-2.2.4.jar')

xml

activity_main

<?xml version="1.0" encoding="utf-8"?><android.support.v4.widget.DrawerLayout    xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:id="@+id/drawer">    <!--主内容布局-->    <RelativeLayout        android:layout_width="match_parent"        android:layout_height="match_parent">        <RadioGroup            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:orientation="horizontal"            android:id="@+id/rel_navigate"            android:layout_alignParentBottom="true">            <RadioButton                android:layout_width="0dp"                android:layout_height="wrap_content"                android:layout_weight="1"                android:text="首页"                android:button="@null"                android:gravity="center"                android:id="@+id/rb_index"                android:padding="3dp"                android:background="@drawable/rb_selector"                android:checked="true"/>            <RadioButton                android:layout_width="0dp"                android:layout_height="wrap_content"                android:layout_weight="1"                android:text="发现"                android:button="@null"                android:padding="3dp"                android:gravity="center"                android:id="@+id/rb_discovery"                android:background="@drawable/rb_selector"/>            <RadioButton                android:layout_width="0dp"                android:layout_height="wrap_content"                android:layout_weight="1"                android:text="下载"                android:button="@null"                android:gravity="center"                android:padding="3dp"                android:id="@+id/rb_down"                android:background="@drawable/rb_selector"/>            <RadioButton                android:layout_width="0dp"                android:layout_height="wrap_content"                android:layout_weight="1"                android:text="我的"                android:padding="3dp"                android:button="@null"                android:gravity="center"                android:id="@+id/rb_me"                android:background="@drawable/rb_selector"/>        </RadioGroup>        <FrameLayout            android:layout_width="match_parent"            android:layout_height="match_parent"            android:layout_above="@id/rel_navigate"            android:id="@+id/main_content"></FrameLayout>    </RelativeLayout>    <!--菜单内容布局-->    <LinearLayout        android:layout_width="260dp"        android:layout_height="match_parent"        android:orientation="vertical"        android:id="@+id/menu"        android:layout_gravity="start"        android:background="#440000ff">        <ImageView            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:src="@mipmap/ic_launcher"            android:id="@+id/img"/>    </LinearLayout></android.support.v4.widget.DrawerLayout>

myindex

<?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:orientation="vertical"    android:layout_width="match_parent"    android:layout_height="match_parent">    <!--TabLayout+ViewPager-->    <android.support.design.widget.TabLayout        android:layout_width="match_parent"        android:layout_height="40dp"        app:tabGravity="fill"        app:tabIndicatorColor="@color/colorAccent"        app:tabMode="fixed"        app:tabSelectedTextColor="@color/colorPrimaryDark"        app:tabTextColor="@color/colorPrimary"        android:id="@+id/mytab"        >    </android.support.design.widget.TabLayout>    <android.support.v4.view.ViewPager        android:layout_width="match_parent"        android:layout_height="match_parent"        android:id="@+id/vp"        ></android.support.v4.view.ViewPager></LinearLayout>

tuijian

<?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">    <android.support.v4.view.ViewPager        android:layout_width="match_parent"        android:layout_height="200dp"        android:id="@+id/vp"></android.support.v4.view.ViewPager><com.example.zonghelianxi.view.XListView    android:id="@+id/xlv"    android:layout_height="match_parent"    android:layout_width="match_parent"></com.example.zonghelianxi.view.XListView></LinearLayout>

index

<?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">    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:id="@+id/tv"        android:text="首页"/></LinearLayout>

xlistview_header

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="wrap_content"    android:gravity="bottom" >    <RelativeLayout        android:id="@+id/xlistview_header_content"        android:layout_width="fill_parent"        android:layout_height="60dp" >        <LinearLayout            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_centerInParent="true"            android:gravity="center"            android:orientation="vertical" android:id="@+id/xlistview_header_text">            <TextView                android:id="@+id/xlistview_header_hint_textview"                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:text="@string/xlistview_header_hint_normal" />            <LinearLayout                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:layout_marginTop="3dp" >                <TextView                    android:layout_width="wrap_content"                    android:layout_height="wrap_content"                    android:text="@string/xlistview_header_last_time"                    android:textSize="12sp" />                <TextView                    android:id="@+id/xlistview_header_time"                    android:layout_width="wrap_content"                    android:layout_height="wrap_content"                    android:textSize="12sp" />            </LinearLayout>        </LinearLayout>        <ImageView            android:id="@+id/xlistview_header_arrow"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_alignLeft="@id/xlistview_header_text"            android:layout_centerVertical="true"            android:layout_marginLeft="-35dp"            android:src="@drawable/xlistview_arrow" />        <ProgressBar            android:id="@+id/xlistview_header_progressbar"            android:layout_width="30dp"            android:layout_height="30dp"            android:layout_alignLeft="@id/xlistview_header_text"            android:layout_centerVertical="true"            android:layout_marginLeft="-40dp"            android:visibility="invisible" />    </RelativeLayout></LinearLayout>

xlistview_footer

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="wrap_content" >    <RelativeLayout        android:id="@+id/xlistview_footer_content"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:padding="10dp" >        <ProgressBar            android:id="@+id/xlistview_footer_progressbar"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_centerInParent="true"            android:visibility="invisible" />        <TextView            android:id="@+id/xlistview_footer_hint_textview"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_centerInParent="true"            android:text="@string/xlistview_footer_hint_normal" />    </RelativeLayout></LinearLayout>


MainActivity

import android.support.v4.widget.DrawerLayout;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.RadioGroup;public class MainActivity extends AppCompatActivity {    private DrawerLayout drawerLayout;    private LinearLayout linearLayout;    private RadioGroup radioGroup;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        drawerLayout = (DrawerLayout) findViewById(R.id.drawer);        linearLayout = (LinearLayout) findViewById(R.id.menu);        ImageView imageView= (ImageView) findViewById(R.id.img);        radioGroup = (RadioGroup) findViewById(R.id.rel_navigate);        imageView.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                //关闭侧滑菜单                drawerLayout.closeDrawer(linearLayout);            }        });        //添加事件        radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {            @Override            public void onCheckedChanged(RadioGroup group, int checkedId) {                switch (checkedId){                    case R.id.rb_index:                        //动态添加fragment                        getSupportFragmentManager().beginTransaction().replace(R.id.main_content,new IndexFragment()).commit();                        break;                    case R.id.rb_discovery:                        addContentFragment("发现");                        break;                    case R.id.rb_down:                        addContentFragment("下载");                        break;                    case R.id.rb_me:                        addContentFragment("我的");                        break;                }            }        });        //首次添加indexfragment        getSupportFragmentManager().beginTransaction().replace(R.id.main_content,new IndexFragment()).commit();    }    public void addContentFragment(String str){        Bundle bundle=new Bundle();        bundle.putString("key",str);        ContentFragment contentFragment=new ContentFragment();        contentFragment.setArguments(bundle);        //动态添加fragment        getSupportFragmentManager().beginTransaction().replace(R.id.main_content,contentFragment).commit();    }}

ContentFragment

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 android.widget.TextView;public class ContentFragment extends Fragment{    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {        View v=inflater.inflate(R.layout.index,container,false);        TextView textView= (TextView) v.findViewById(R.id.tv);        Bundle bundle=getArguments();        textView.setText(bundle.getString("key"));        return v;    }    @Override    public void onActivityCreated(@Nullable Bundle savedInstanceState) {        super.onActivityCreated(savedInstanceState);    }}

IndexFragment

import android.os.Bundle;import android.support.annotation.Nullable;import android.support.design.widget.TabLayout;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 java.util.ArrayList;import java.util.List;public class IndexFragment extends Fragment{    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {        View v=inflater.inflate(R.layout.myindex,container,false);        TabLayout tabLayout= (TabLayout) v.findViewById(R.id.mytab);        ViewPager viewPager= (ViewPager) v.findViewById(R.id.vp);        List<String> tabs=new ArrayList<>();        tabs.add("推荐");        tabs.add("课程");        tabs.add("实战");        tabs.add("职业路径");        //设置适配器 getChildFragmentManager:在子fragment中获取 fragment的管理类对象        viewPager.setAdapter(new MyPagerAdapter(getChildFragmentManager(),tabs));        //tabLayout与viewPager创建关联        tabLayout.setupWithViewPager(viewPager);        //        viewPager.setOffscreenPageLimit(tabs.size());        return v;    }    @Override    public void onActivityCreated(@Nullable Bundle savedInstanceState) {        super.onActivityCreated(savedInstanceState);    }}

TuijianFragment

import android.os.AsyncTask;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.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import com.example.zonghelianxi.view.XListView;import com.google.gson.Gson;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.URL;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.List;public class TuijianFragment extends Fragment {    private ViewPager viewPager;    private XListView xListView;    private ImageView[] img;    private List<Result.DataScrollEntity> viewpagerDatas=new ArrayList<>();    private MyAdapter adapter;    private int type=1;    private int pageIndex=1;    private String url="http://www.93.gov.cn/93app/data.do?channelId=0&startNum=0";    Handler handler=new Handler(){        @Override        public void handleMessage(Message msg) {            int index=viewPager.getCurrentItem();            viewPager.setCurrentItem(index+1);            sendEmptyMessageDelayed(1,2000);        }    };    private List<Result.DataEntity> listviewDatas;    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {        View v = inflater.inflate(R.layout.tuijian, container, false);        viewPager = (ViewPager) v.findViewById(R.id.vp);        xListView = (XListView) v.findViewById(R.id.xlv);        return v;    }    @Override    public void onActivityCreated(@Nullable Bundle savedInstanceState) {        super.onActivityCreated(savedInstanceState);        //调用网络请求工具类,获取数据        MyNetTask myNetTask=new MyNetTask(new MyNetTask.Icallbacks() {            @Override            public void getNetdata(String jsonstr) {                //gson                Gson gson=new Gson();                Result result=gson.fromJson(jsonstr, Result.class);                //listview要显示的数据                listviewDatas = result.getData();                //轮播图要显示的数据                viewpagerDatas = result.getDataScroll();                //为viewpager设置适配器                viewPager.setAdapter(new MyLunBoAdapter(getActivity(), viewpagerDatas));                viewPager.setCurrentItem(viewpagerDatas.size()*100);                img = new ImageView[viewpagerDatas.size()];                handler.sendEmptyMessageDelayed(1,2000);                //设置支持下拉刷新                xListView.setPullRefreshEnable(true);                //设置支持上拉加载更多                xListView.setPullLoadEnable(true);                xListView.setXListViewListener(new XListView.IXListViewListener() {                    //刷新回调的接口                    @Override                    public void onRefresh() {                        type=1;                        //重新请求第一页的数据 10条数据                        pageIndex=1;                        String url="http://www.93.gov.cn/93app/data.do?channelId=0&startNum="+pageIndex;                        new MyTask().execute(url);                    }                    //加载更多回调的接口                    @Override                    public void onLoadMore() {                        type=2;                        pageIndex++;                        //进行地址的拼接                        String url="http://www.93.gov.cn/93app/data.do?channelId=0&startNum="+pageIndex;                        //执行异步请求                        new MyTask().execute(url);                    }                });                new MyTask().execute(url);            }        });        myNetTask.execute("http://www.93.gov.cn/93app/data.do?channelId=0&startNum=0");    }    class MyTask extends AsyncTask<String,Void,String> {        @Override        protected String doInBackground(String... params) {            String result = "";            try {                URL url = new URL(params[0]);                HttpURLConnection connection = (HttpURLConnection) url.openConnection();                connection.setRequestMethod("GET");                connection.setConnectTimeout(20000);                connection.setReadTimeout(20000);                if(connection.getResponseCode()==200){                    InputStream inputStream=connection.getInputStream();                    result=StreamToString.streamToStr(inputStream,"utf-8");                }            } catch (Exception e) {                e.printStackTrace();                Log.e("zzz",e.getMessage().toString());            }            return result;        }        @Override        protected void onPostExecute(String s) {            Log.d("zzz","data:"+s);            //解析            Gson gson=new Gson();            Result result=gson.fromJson(s,Result.class);            if(type==1){//代表刷新                //如果是刷新的话                listviewDatas.clear();//清除原有的数据                listviewDatas.addAll(result.getData());//添加新的数据                setAdapter();                //关闭xlistview的头部视图--延迟关闭                new Handler().postDelayed(new Runnable() {                    @Override                    public void run() {                        xListView.stopRefresh();//关闭                        Date date=new Date(System.currentTimeMillis());                        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");                        String s=sdf.format(date);                        xListView.setRefreshTime(s);//设置刷新时间                    }                },1000);            }else if(type==2){//代表加载更多                //得到数据                listviewDatas.addAll(result.getData());//datas.addAll(0,result.getData());//将新请求的数据添加到集合的最前面                //设置适配器                setAdapter();                //关闭xlistview的底部视图--延迟关闭                new Handler().postDelayed(new Runnable() {                    @Override                    public void run() {                        xListView.stopLoadMore();                    }                },1000);            }else{            }        }    }    public void setAdapter() {        if(adapter==null){            adapter=new MyAdapter(listviewDatas,getActivity());            xListView.setAdapter(adapter);        }else{            adapter.notifyDataSetChanged();        }    }}

MyNetTask

import android.os.AsyncTask;import java.io.IOException;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;public class MyNetTask extends AsyncTask<String,Void,String> {    //1.初使化一个接口对象    private Icallbacks icallbacks;    public MyNetTask(Icallbacks icallbacks) {        //2.实例化对象        this.icallbacks = icallbacks;    }    @Override    protected String doInBackground(String... params) {        String str="";        try {            //使用HttpUrlConnection            URL url=new URL(params[0]);            HttpURLConnection connection=(HttpURLConnection) url.openConnection();            connection.setRequestMethod("GET");            connection.setReadTimeout(5000);            connection.setConnectTimeout(5000);            if(connection.getResponseCode()==200){                InputStream inputStream=connection.getInputStream();                //调用工具类中的静态方法                str=StreamToString.streamToStr(inputStream,"utf-8");            }        } catch (MalformedURLException e) {            e.printStackTrace();        }catch (IOException e){            e.printStackTrace();        }        return str;    }    @Override    protected void onPostExecute(String s) {        super.onPostExecute(s);        //3.调用接口中定义的方法        icallbacks.getNetdata(s);    }    public interface Icallbacks {        void getNetdata(String jsonstr);    }}

ImageUtils

import android.content.Context;import android.graphics.Bitmap;import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiscCache;import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;import com.nostra13.universalimageloader.core.DisplayImageOptions;import com.nostra13.universalimageloader.core.ImageLoader;import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;import com.nostra13.universalimageloader.core.assist.ImageScaleType;import java.io.File;public class ImageUtils {    /**     * 对ImageLoader进行初使化     * @param context     */    public static void initImageLoader(Context context){        File cacheFile=context.getExternalCacheDir();//android认为的缓存目录        ImageLoaderConfiguration configuration=new ImageLoaderConfiguration.Builder(context)                .memoryCacheExtraOptions(480, 800)//缓存图片最大的长和宽                .threadPoolSize(2)//线程池的数量                .threadPriority(4)                .memoryCacheSize(2*1024*1024)//设置内存缓存区大小                .diskCacheSize(20*1024*1024)//设置sd卡缓存区大小                .diskCache(new UnlimitedDiscCache(cacheFile))//自定义缓存目录                .writeDebugLogs()//打印日志内容                .diskCacheFileNameGenerator(new Md5FileNameGenerator())//给缓存的文件名进行md5加密处理                .build();        ImageLoader.getInstance().init(configuration);    }    /**     * 得到图片的显示设置类     * @return     */    public static DisplayImageOptions getImageOptions(){        DisplayImageOptions options=new DisplayImageOptions.Builder()                .cacheInMemory(true)//使用内存缓存                .cacheOnDisk(true)//使用磁盘缓存                .bitmapConfig(Bitmap.Config.RGB_565)//设置图片的色彩模式                .imageScaleType(ImageScaleType.EXACTLY)//设置图片的缩放方式                .build();        return options;    }}

MyPagerAdapter

import android.support.v4.app.Fragment;import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentPagerAdapter;import java.util.List;public class MyPagerAdapter extends FragmentPagerAdapter {    private List<String> tabs;//选项卡列表    //得到页面的标题,选项卡,返回的数据,tabLayout的选项卡    @Override    public CharSequence getPageTitle(int position) {        return tabs.get(position);    }    public MyPagerAdapter(FragmentManager fm,List<String> tabs) {        super(fm);        this.tabs=tabs;    }    @Override    public Fragment getItem(int position) {        TuijianFragment tuijianFragment=new TuijianFragment();        if(position==1){        }        return tuijianFragment;    }    @Override    public int getCount() {        return tabs.size();    }}

MyAdapter

import android.content.Context;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.TextView;import java.util.List;public class MyAdapter extends BaseAdapter{    private List<Result.DataEntity> datas;    private Context context;    public MyAdapter(List<Result.DataEntity> datas, Context context) {        this.datas = datas;        this.context = context;    }    @Override    public int getCount() {        return datas.size();    }    @Override    public Object getItem(int position) {        return null;    }    @Override    public long getItemId(int position) {        return 0;    }    @Override    public View getView(int position, View convertView, ViewGroup parent) {        TextView tv=new TextView(context);        tv.setText(datas.get(position).getTITLE());        return tv;    }}

MyApplication

import android.app.Application;public class MyApplication extends Application{    @Override    public void onCreate() {        super.onCreate();        //进行初使化        ImageUtils.initImageLoader(this);    }}

StreamToString

import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;public class StreamToString {    public static String streamToStr(InputStream inputStream,String chartSet){        StringBuilder builder=new StringBuilder();        try {            BufferedReader br=new BufferedReader(new InputStreamReader(inputStream,chartSet));            String con;            while ((con=br.readLine())!=null){                builder.append(con);            }            br.close();            return builder.toString();        } catch (Exception e) {            e.printStackTrace();        }        return "";    }}

MyLunBoAdapter

import android.content.Context;import android.support.v4.view.PagerAdapter;import android.util.Log;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import com.nostra13.universalimageloader.core.ImageLoader;import java.util.List;public class MyLunBoAdapter extends PagerAdapter{    private Context context;    //用于存放网络图片的url地址    private List<Result.DataScrollEntity> imgUrl;    public MyLunBoAdapter(Context context, List<Result.DataScrollEntity> imgUrl) {        this.context = context;        this.imgUrl=imgUrl;    }    //返回页面的数量    @Override    public int getCount() {        return Integer.MAX_VALUE;    }    @Override    public boolean isViewFromObject(View view, Object object) {        return view==object;    }    //0~getCount返回的值-1    @Override    public Object instantiateItem(ViewGroup container, int position) {        //返回当前显示的视图        ImageView imageView = new ImageView(context);        //图片的绽放方式        imageView.setScaleType(ImageView.ScaleType.FIT_XY);        //取得图片的网络路径  imgUrl.size 5        String path=imgUrl.get((position%imgUrl.size())).getIMAGEURL();        Log.d("zzz","path:"+path);        //使用ImageLoader下载图片 注意:需要拼接路径        ImageLoader.getInstance().displayImage("http://www.93.gov.cn/"+path,                imageView, ImageUtils.getImageOptions());        //添加到容器        container.addView(imageView);        return imageView;    }    @Override    public void destroyItem(ViewGroup container, int position, Object object) {        container.removeView((View) object);    }}




原创粉丝点击