侧拉+轮播+刷新

xmlxml 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:la
摘要由CSDN通过智能技术生成

xml


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

<?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">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:id="@+id/lin_content">
        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="9"
            android:id="@+id/frame">

        </FrameLayout>
        <RadioGroup
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:id="@+id/rg"
            android:orientation="horizontal">
            <RadioButton
                android:id="@+id/rb1"
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="match_parent"
                android:text="首页"
                android:button="@null"
                android:layout_gravity="center"
                android:gravity="center"
                android:textColor="#f00"/>
            <RadioButton
                android:id="@+id/rb2"
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="match_parent"
                android:text="分类"
                android:button="@null"
                android:layout_gravity="center"
                android:gravity="center"/>
            <RadioButton
                android:id="@+id/rb3"
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="match_parent"
                android:text="发现"
                android:button="@null"
                android:layout_gravity="center"
                android:gravity="center"/>
            <RadioButton
                android:id="@+id/rb4"
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="match_parent"
                android:text="购物车"
                android:button="@null"
                android:layout_gravity="center"
                android:gravity="center"/>
            <RadioButton
                android:id="@+id/rb5"
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="match_parent"
                android:text="我的"
                android:button="@null"
                android:layout_gravity="center"
                android:gravity="center"/>
        </RadioGroup>
    </LinearLayout>
    <LinearLayout
        android:layout_width="320dp"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:layout_gravity="start"
        android:id="@+id/menu"
        android:background="#f0f">
        <ImageView
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:src="@mipmap/ic_launcher"
            android:layout_gravity="center" />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="50dp"
            android:text="个人设置"
            android:layout_gravity="center"
            android:gravity="center"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="50dp"
            android:text="缓存"
            android:layout_gravity="center"
            android:gravity="center"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="50dp"
            android:text="夜间模式"
            android:layout_gravity="center"
            android:gravity="center"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="50dp"
            android:text="配置"
            android:layout_gravity="center"
            android:gravity="center"/>
    </LinearLayout>
</android.support.v4.widget.DrawerLayout>


<?xml version="1.0" encoding="utf-8"?>
<com.handmark.pulltorefresh.library.PullToRefreshScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:ptr="http://schemas.android.com/apk/res-auto"
    ptr:ptrDrawable="@drawable/default_ptr_flip"
    ptr:ptrAnimationStyle="flip"
    ptr:ptrHeaderBackground="#383838"
    ptr:ptrHeaderTextColor="#FFFFFF"
    android:id="@+id/psv"
    android:orientation="vertical">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <com.youth.banner.Banner
            android:layout_width="match_parent"
            android:layout_height="200dp"
            android:id="@+id/banner">
        </com.youth.banner.Banner>
        <com.example.monthtest1.MyGridView
            android:id="@+id/gv"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:numColumns="2">

        </com.example.monthtest1.MyGridView>

    </LinearLayout>

</com.handmark.pulltorefresh.library.PullToRefreshScrollView>



<?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">
    <ImageView
        android:id="@+id/img"
        android:layout_width="100dp"
        android:layout_height="100dp"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/title"/>
</LinearLayout>

NetStateUtil

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;

public class NetStateUtil {
    public static boolean isConn(Context context) {
        boolean bisConnFlag = false;
        ConnectivityManager conManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo network = conManager.getActiveNetworkInfo();
        if (network != null) {
            bisConnFlag = conManager.getActiveNetworkInfo().isAvailable();
        }
        return bisConnFlag;
    }

    public static void showNoNetWorkDlg(final Context context) {
        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        builder.setIcon(R.mipmap.ic_launcher)         //
                .setTitle(R.string.app_name)            //
                .setMessage("当前无网络").setPositiveButton("设置", new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                // 跳转到系统的网络设置界面
                Intent intent = null;
                // 先判断当前系统版本
                if (android.os.Build.VERSION.SDK_INT > 10) {  // 3.0以上
                    intent = new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS);
                } else {
                    intent = new Intent();
                    intent.setClassName("com.android.settings", "com.android.settings.WirelessSettings");
                }
                context.startActivity(intent);

            }
        }).setNegativeButton("知道了", null).show();
    }

}


MainActivity

import android.graphics.Color;
import android.support.annotation.IdRes;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    private DrawerLayout drawer;
    private LinearLayout menu;
    private RadioGroup rg;
    private RadioButton rb1;
    private RadioButton rb2;
    private RadioButton rb3;
    private RadioButton rb4;
    private RadioButton rb5;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        drawer = (DrawerLayout) findViewById(R.id.drawer);
        menu = (LinearLayout) findViewById(R.id.menu);
        rg = (RadioGroup) findViewById(R.id.rg);
        rb1 = (RadioButton) findViewById(R.id.rb1);
        rb2 = (RadioButton) findViewById(R.id.rb2);
        rb3 = (RadioButton) findViewById(R.id.rb3);
        rb4 = (RadioButton) findViewById(R.id.rb4);
        rb5 = (RadioButton) findViewById(R.id.rb5);
        getSupportFragmentManager().beginTransaction().replace(R.id.frame,new F1()).commit();
        rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup radioGroup, @IdRes int i) {
                switch (i){
                    case R.id.rb1:
                        getSupportFragmentManager().beginTransaction().replace(R.id.frame,new F1()).commit();
                        rb1.setTextColor(Color.RED);
                        rb2.setTextColor(Color.BLACK);
                        rb3.setTextColor(Color.BLACK);
                        rb4.setTextColor(Color.BLACK);
                        rb5.setTextColor(Color.BLACK);
                        break;
                    case R.id.rb2:
                        getSupportFragmentManager().beginTransaction().replace(R.id.frame,new F2()).commit();
                        rb2.setTextColor(Color.RED);
                        rb1.setTextColor(Color.BLACK);
                        rb3.setTextColor(Color.BLACK);
                        rb4.setTextColor(Color.BLACK);
                        rb5.setTextColor(Color.BLACK);
                        break;
                }
            }
        });
        drawer.setDrawerListener(new DrawerLayout.DrawerListener() {
            @Override
            public void onDrawerSlide(View drawerView, float slideOffset) {
            }
            @Override
            public void onDrawerOpened(View drawerView) {
                Toast.makeText(MainActivity.this, "侧拉菜单已打开", Toast.LENGTH_SHORT).show();
                //Log.i("TAG", "侧拉菜单打开了");
            }
            @Override
            public void onDrawerClosed(View drawerView) {
                Toast.makeText(MainActivity.this, "侧拉菜单已关闭", Toast.LENGTH_SHORT).show();
                //Log.i("TAG", "侧拉菜单关闭了");
            }
            @Override
            public void onDrawerStateChanged(int newState) {
            }
        });
        boolean conn = NetStateUtil.isConn(MainActivity.this);
        if(conn){
            Toast.makeText(this,"已经联网了",Toast.LENGTH_SHORT).show();

        }else {
            Toast.makeText(this,"没联网,请连接网络",Toast.LENGTH_SHORT).show();
        }
        menu.setOnClickListener(new View.OnClickListener() {

           @Override
           public void onClick(View view) {
                drawer.closeDrawer(menu);
           }
       });
    }
}

F1

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.GridView;
import android.widget.ScrollView;
import android.widget.Toast;

import com.google.gson.Gson;
import com.handmark.pulltorefresh.library.ILoadingLayout;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshScrollView;
import com.youth.banner.Banner;

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



public class F1 extends Fragment{

    private GridView gv;
    private Banner banner;
    private PullToRefreshScrollView psv;
    private int pageIndex=1;
    private int opertype=1;
    private MyAdapter adapter;
    private List<Result.NewslistBean> list=new ArrayList<>();
    private String url="http://api.tianapi.com/guonei/?key=796e2be73bfe960de4e11807f5bef861&num=10";
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.f1, container,false);
        psv = (PullToRefreshScrollView) v.findViewById(R.id.psv);
        banner = (Banner) v.findViewById(R.id.banner);
        gv = (GridView) v.findViewById(R.id.gv);
        return v;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        //Toast.makeText(getActivity(),"haohaoxuexi",Toast.LENGTH_SHORT).show();
        initBanner();
        requestData();
        intitPullToRefresh();
    }
    private void setAdapter(){
        if(adapter==null){
            adapter = new MyAdapter(list, getActivity());
            gv.setAdapter(adapter);
        }else {
            adapter.notifyDataSetChanged();
        }

    }
    public void requestData(){
        MyAsynTask myAsynTask=new MyAsynTask(new MyAsynTask.Icallbacks() {

            @Override
            public void updateUiByjson(String jsonstr) {
                Gson gson=new Gson();
                Result result = gson.fromJson(jsonstr, Result.class);
                if(opertype==1){
                    list.clear();
                    list.addAll(0,result.getNewslist());
                    Log.d("zzz","********"+list.get(0).getTitle());
                }else {
                    list.addAll(result.getNewslist());
                }
                setAdapter();
                psv.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        psv.onRefreshComplete();
                    }
                },500);
            }
        });
        myAsynTask.execute(url);
    }
    public void intitPullToRefresh(){
        psv.setMode(PullToRefreshBase.Mode.BOTH);
        ILoadingLayout startLayout = psv.getLoadingLayoutProxy(true, false);
        startLayout.setPullLabel("下拉刷新");
        startLayout.setRefreshingLabel("正在刷新");
        startLayout.setReleaseLabel("放开刷新");

        ILoadingLayout endLayout = psv.getLoadingLayoutProxy(false, true);
        endLayout.setPullLabel("上拉刷新");
        endLayout.setRefreshingLabel("正在刷新");
        endLayout.setReleaseLabel("放开刷新");
        psv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ScrollView>() {
            @Override
            public void onPullDownToRefresh(PullToRefreshBase<ScrollView> pullToRefreshBase) {
                pageIndex=1;
                opertype=1;
                requestData();
            }

            @Override
            public void onPullUpToRefresh(PullToRefreshBase<ScrollView> pullToRefreshBase) {
                pageIndex++;
                opertype=2;
                requestData();
            }
        });
    }
    public void initBanner(){
        List<String> urls=new ArrayList<>();
        urls.add("http://pic8.nipic.com/20100701/5290458_114840036316_2.jpg");
        urls.add("http://pic2.nipic.com/20090424/1468853_230119053_2.jpg");
        urls.add("http://img3.3lian.com/2013/s1/20/d/57.jpg");
        urls.add("http://pic39.nipic.com/20140226/18071023_164300608000_2.jpg");
        urls.add("http://a0.att.hudong.com/15/08/300218769736132194086202411_950.jpg");
        banner.setImageLoader(new MyBannerLoader());//添加自定义的图片加载器
        banner.setImages(urls);//设置图片资源
        banner.start();
    }
}


MyAdapter

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

import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer;
import com.nostra13.universalimageloader.utils.L;

import java.util.List;


public class MyAdapter extends BaseAdapter{
    private List<Result.NewslistBean> list;
    private Context context;
    private DisplayImageOptions optionsoptions;
    public MyAdapter(List<Result.NewslistBean> list, Context context) {
        this.list = list;
        this.context = context;
            optionsoptions= new DisplayImageOptions.Builder()
                .cacheInMemory(true)//使用内存缓存
                .cacheOnDisk(true)//使用磁盘缓存
                .bitmapConfig(Bitmap.Config.RGB_565)//设置图片格式
                .showImageOnLoading(R.mipmap.ic_launcher)//设置正在下载的图片
                .showImageForEmptyUri(R.mipmap.ic_launcher)//url为空或请求的资源不存在时
                .showImageOnFail(R.mipmap.ic_launcher)//下载失败时显示的图片
                .displayer(new RoundedBitmapDisplayer(30))//设置圆角,参数代表度数
                .build();

    }

    @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) {
        ViewHolder vh;
        if(view==null){
            vh = new ViewHolder();
            view = View.inflate(context, R.layout.item, null);
            vh.img=view.findViewById(R.id.img);
            vh.title=view.findViewById(R.id.title);
            view.setTag(vh);
        }else {
            vh = (ViewHolder) view.getTag();
        }
        vh.title.setText(list.get(i).getTitle());
        String picUrl = list.get(i).getPicUrl();
        ImageLoader.getInstance().displayImage(picUrl,vh.img,optionsoptions);
        return view;
    }
    class ViewHolder{
        ImageView img;
        TextView title;
    }
}

MyApplication

import android.app.Application;

import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiscCache;
import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;

import java.io.File;



public class MyApplication extends Application{
    @Override
    public void onCreate() {
        super.onCreate();
        File cacheFile = getExternalCacheDir();
        ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(this)
                .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(config);
    }
}

MyAsynTask

import android.os.AsyncTask;
import android.util.Log;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;



public class MyAsynTask extends AsyncTask<String,Void,String>{
    private Icallbacks icallbacks;

    public MyAsynTask(Icallbacks icallbacks) {
        this.icallbacks = icallbacks;
    }

    @Override
    protected String doInBackground(String... strings) {
        try {
            URL url=new URL(strings[0]);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("GET");
            connection.setReadTimeout(2000);
            connection.setConnectTimeout(2000);
            int code = connection.getResponseCode();
            if(code==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);
                }
                String string = bos.toString();
                Log.d("zzz","string"+string);
                bos.close();
                return string;

            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return null;
    }

    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);
        icallbacks.updateUiByjson(s);
    }
    public interface Icallbacks{
        void updateUiByjson(String jsonstr);
    }
}

MyBannerLoader

import android.content.Context;
import android.widget.ImageView;

import com.youth.banner.loader.ImageLoader;



public class MyBannerLoader extends ImageLoader{
    @Override
    public void displayImage(Context context, Object path, ImageView imageView) {
        com.nostra13.universalimageloader.core.ImageLoader.getInstance().displayImage(path.toString(),imageView);
    }
}

MyGridView

import android.content.Context;
import android.util.AttributeSet;
import android.widget.GridView;


public class MyGridView extends GridView{
    public MyGridView(Context context) {
        super(context);
    }

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

    public MyGridView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
                MeasureSpec.AT_MOST);

        super.onMeasure(widthMeasureSpec, expandSpec);


    }
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值