DrawerLayout与listView结合(drawerlayout条目点击显示)

来源:互联网 发布:看漫画的软件 编辑:程序博客网 时间:2024/05/22 06:46
布局:




<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/drawer_gen"
    >


  <!-- 先写主背景区域-->
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/rela_zhubeijing"
        >


     </RelativeLayout>


  <!--再写侧滑部分-->
  <LinearLayout
      android:background="#ffffff"
      android:orientation="vertical"
      android:layout_width="200dp"
      android:layout_height="match_parent"
      android:id="@+id/linear_cemian"
      android:layout_gravity="left"
      >




    <ListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/list_view"
        ></ListView>
  </LinearLayout>
</android.support.v4.widget.DrawerLayout>








代码:


MainActivity:




package com.example.wanghuantao170920;


import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.RelativeLayout;


import com.example.wanghuantao170920.adpater.MyAdapter;
import com.example.wanghuantao170920.fragment.Fragment_zhu;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshListView;


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


public class MainActivity extends AppCompatActivity {


    private RelativeLayout rela_zhubeijing;
    private DrawerLayout drawer_gen;
    private LinearLayout linear_cemian;
    private ListView listView;
    private Fragment_zhu fragment_zhu;




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


        //拿到控件
        rela_zhubeijing = (RelativeLayout) findViewById(R.id.rela_zhubeijing);
        drawer_gen = (DrawerLayout) findViewById(R.id.drawer_gen);
        linear_cemian = (LinearLayout) findViewById(R.id.linear_cemian);
        listView = (ListView) findViewById(R.id.list_view);


        Bundle bundle = new Bundle();


      bundle.putInt("type",2);


        fragment_zhu = new Fragment_zhu();
        fragment_zhu.setArguments(bundle);
        getSupportFragmentManager().beginTransaction().replace(R.id.rela_zhubeijing,fragment_zhu).commit();
        //侧面的listview集合
        List<String> list = new ArrayList<>();
        list.add("新闻");
        list.add("关注");
        list.add("动态");
        list.add("设置");
        MyAdapter myAdapter = new MyAdapter(list, MainActivity.this);
        listView.setAdapter(myAdapter);


        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                //点击条目传值.访问网络


                Bundle bundle = new Bundle();


                bundle.putInt("type",i);
                fragment_zhu.setArguments(bundle);


             //替换显示
                getSupportFragmentManager().beginTransaction().replace(R.id.rela_zhubeijing, fragment_zhu).commit();


                //侧滑页面消失
                drawer_gen.closeDrawer(linear_cemian);
            }
        });




    }
}






ListViewAdapter:








package com.example.wanghuantao170920.adpater;


import android.content.Context;
import android.support.v4.app.FragmentActivity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;


import com.example.wanghuantao170920.R;
import com.example.wanghuantao170920.bean.DBean;
import com.example.wanghuantao170920.util.ImageLoaderUtil;
import com.nostra13.universalimageloader.core.ImageLoader;


import java.util.List;


/**
 * Created by Menglucywhh on 2017/9/19.
 */
public class ListAdapter extends BaseAdapter{
    List<DBean.DataBean> list;
    Context context;
    public ListAdapter(List<DBean.DataBean> list, Context context) {
        this.list = list;
        this.context = context;
        ImageLoaderUtil.initConfigration(context);
    }


    @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 holder;
        if (view==null){
            view = View.inflate(context, R.layout.list_item,null);


            holder = new ViewHolder();


            holder.imageView = view.findViewById(R.id.imageView);
            holder.textView = view.findViewById(R.id.textView);


            view.setTag(holder);
        }else{
            holder = (ViewHolder) view.getTag();
        }


        ImageLoader.getInstance().displayImage(list.get(i).getPic_url(),holder.imageView,ImageLoaderUtil.getDefautOption());
         holder.textView.setText(list.get(i).getNews_title());
        return view;


}
    class ViewHolder{
        ImageView imageView;
        TextView textView;
    }
}






ListAdapter:






package com.example.wanghuantao170920.adpater;


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.wanghuantao170920.MainActivity;
import com.example.wanghuantao170920.R;
import com.example.wanghuantao170920.util.ImageLoaderUtil;
import com.nostra13.universalimageloader.core.ImageLoader;


import java.util.List;
import java.util.PriorityQueue;


/**
 * Created by Menglucywhh on 2017/9/19.
 */
public class MyAdapter extends BaseAdapter{
    List<String> list;
    Context context;
    public MyAdapter(List<String> list, Context context) {
        this.list = list;
        this.context = context;




    }


    @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 holder;
        if (view==null){
            view = View.inflate(context, R.layout.list_item,null);


            holder = new ViewHolder();


            holder.imageView = view.findViewById(R.id.imageView);
            holder.textView = view.findViewById(R.id.textView);


            view.setTag(holder);
        }else{
            holder = (ViewHolder) view.getTag();
        }


        holder.imageView.setImageResource(R.mipmap.ic_launcher);
        holder.textView.setText(list.get(i));
        return view;
    }
    class ViewHolder{
        ImageView imageView;
        TextView textView;
    }
}






主Fragment:








package com.example.wanghuantao170920.fragment;


import android.os.AsyncTask;
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.ImageView;
import android.widget.ListView;
import android.widget.Toast;


import com.example.wanghuantao170920.R;
import com.example.wanghuantao170920.adpater.ListAdapter;
import com.example.wanghuantao170920.bean.DBean;
import com.google.gson.Gson;
import com.handmark.pulltorefresh.library.ILoadingLayout;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshListView;


import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;


/**
 * Created by Menglucywhh on 2017/9/19.
 */
public class Fragment_zhu extends Fragment {


    List<DBean.DataBean> list= new ArrayList<>();
    private PullToRefreshListView refreshListView;
    int type;
    int num =1;
    private ILoadingLayout endlabels;
    private ILoadingLayout startlabels;
    private ListAdapter listAdapter;


    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_zhubeijing, container, false);


        refreshListView = view.findViewById(R.id.refresh_list_view);


        getDataFromNet();
        setAdapter();
        //设置PullToRefreshListView刷新模式,上拉下拉都可以
        refreshListView.setMode(PullToRefreshBase.Mode.BOTH);


        //设置刷新显示的状态,可以下拉,不能上拉
        startlabels = refreshListView.getLoadingLayoutProxy(true, false);
        startlabels.setRefreshingLabel("正在刷新");
        startlabels.setPullLabel("下拉刷新");
        startlabels.setReleaseLabel("松开刷新");


        endlabels = refreshListView.getLoadingLayoutProxy(false, true);
        endlabels.setRefreshingLabel("正在加载");
        endlabels.setPullLabel("上拉加载");
        endlabels.setReleaseLabel("松开加载");


        //设置监听事件
        refreshListView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
            @Override
            //下拉刷新调用
            public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
                num = 1;
                //获取数据
                getDataFromNetxiala();


            }


            @Override
            //上拉加载调用
            public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
                num++;


                getDataFromNet();




            }
        });


        return view;
    }


    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);


        Bundle bundle = getArguments();
        //如果没拿到就默认为1
        type = bundle.getInt("type", 1);


        getDataFromNet();


    }


    private void getDataFromNetxiala() {
        AsyncTask<Void, Void, String> asyncTask = new AsyncTask<Void, Void, String>() {
            @Override
            protected String doInBackground(Void... voids) {
                String path = "http://api.expoon.com/AppNews/getNewsList/type/3/p/" + num;


                try {
                    URL url = new URL(path);
                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                    connection.setRequestMethod("GET");
                    connection.setConnectTimeout(5000);
                    connection.setReadTimeout(5000);


                    int responseCode = connection.getResponseCode();
                    if (responseCode == 200) {
                        InputStream inputStream = connection.getInputStream();


                        String json = streamToString(inputStream, "utf-8");


                        Thread.sleep(2000);
                        return json;
                    }


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


            @Override
            protected void onPostExecute(String json) {


                if (json!=null && !json.isEmpty()){
                    Gson gson = new Gson();


                    DBean dBean = gson.fromJson(json, DBean.class);




                    list.addAll(0,dBean.getData());


                    long currentTimeMillis = System.currentTimeMillis();
                    Date date2= new Date(currentTimeMillis);
                    SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm");


                    String format = dateFormat.format(date2);


                    //设置刷新的时间
                    startlabels.setLastUpdatedLabel(format);


                    //停止刷新
                    refreshListView.onRefreshComplete();
                    setAdapter();


                }else{
                    Toast.makeText(getActivity(),"没拿到数据",Toast.LENGTH_SHORT).show();
                }
            }


        };
        asyncTask.execute();
    }
    private void getDataFromNet() {
        AsyncTask<Void, Void, String> asyncTask = new AsyncTask<Void, Void, String>() {
            @Override
            protected String doInBackground(Void... voids) {
                String path = "http://api.expoon.com/AppNews/getNewsList/type/3/p/" + num;


                try {
                    URL url = new URL(path);
                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                    connection.setRequestMethod("GET");
                    connection.setConnectTimeout(5000);
                    connection.setReadTimeout(5000);


                    int responseCode = connection.getResponseCode();
                    if (responseCode == 200) {
                        InputStream inputStream = connection.getInputStream();


                        String json = streamToString(inputStream, "utf-8");


                        Thread.sleep(2000);
                        return json;
                    }


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


            @Override
            protected void onPostExecute(String json) {


                if (json!=null && !json.isEmpty()){
                Gson gson = new Gson();


                DBean dBean = gson.fromJson(json, DBean.class);




                    list.addAll(dBean.getData());


                    long currentTimeMillis = System.currentTimeMillis();
                    Date date2= new Date(currentTimeMillis);
                    SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm");


                    String format = dateFormat.format(date2);


                    //设置刷新的时间
                    endlabels.setLastUpdatedLabel(format);


                    //停止刷新
                    refreshListView.onRefreshComplete();
                    setAdapter();
                }else{
                   Toast.makeText(getActivity(),"没拿到数据",Toast.LENGTH_SHORT).show();
                }
            }


        };
        asyncTask.execute();
    }


    private void setAdapter() {
        if (listAdapter==null) {
            listAdapter = new ListAdapter(list, getActivity());
            refreshListView.setAdapter(listAdapter);
        }else{
            listAdapter.notifyDataSetChanged();
        }
    }


    private String streamToString(InputStream inputStream, String charset) {


        try {
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream, charset);


            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);


            StringBuilder builder = new StringBuilder();


            String s = null;
            while ((s = bufferedReader.readLine()) != null) {
                builder.append(s);
            }
            bufferedReader.close();
            return builder.toString();




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


        return charset;
    }
}






工具类:






package com.example.wanghuantao170920.util;


import android.content.Context;
import android.graphics.Bitmap;


import com.example.wanghuantao170920.R;
import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiskCache;
import com.nostra13.universalimageloader.cache.disc.naming.HashCodeFileNameGenerator;
import com.nostra13.universalimageloader.cache.memory.impl.LruMemoryCache;
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 com.nostra13.universalimageloader.core.assist.QueueProcessingType;
import com.nostra13.universalimageloader.core.decode.BaseImageDecoder;
import com.nostra13.universalimageloader.core.download.BaseImageDownloader;
import com.nostra13.universalimageloader.utils.StorageUtils;


import java.io.File;


/**
 * Created by Menglucywhh on 2017/9/19.
 */
public class ImageLoaderUtil {
    public static void initConfigration(Context context) {
        File cacheDir = StorageUtils.getCacheDirectory(context);  //缓存文件夹路径




        ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
                .threadPoolSize(3)//一般就是3,,,1-5
                .threadPriority(Thread.NORM_PRIORITY - 2) // default 设置当前线程的优先级,,,1-10
                .tasksProcessingOrder(QueueProcessingType.FIFO) // default
                .denyCacheImageMultipleSizesInMemory()//拒绝缓存加载内容相同但大小不同的图片
                .memoryCache(new LruMemoryCache(2 * 1024 * 1024)) //可以通过自己的内存缓存实现
                .memoryCacheSize(2 * 1024 * 1024)  // 内存缓存的最大值
                .memoryCacheSizePercentage(13) // default
                .diskCache(new UnlimitedDiskCache(cacheDir)) // default 可以自定义缓存路径
                .diskCacheSize(50 * 1024 * 1024) // 50 Mb sd卡(本地)缓存的最大值
                .diskCacheFileCount(100)  // 可以缓存的文件数量
                // default为使用HASHCODE对UIL进行加密命名, 还可以用MD5(new Md5FileNameGenerator())加密
                .diskCacheFileNameGenerator(new HashCodeFileNameGenerator())
                .imageDownloader(new BaseImageDownloader(context)) // default
                .imageDecoder(new BaseImageDecoder(true)) // default
                .defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default
                .writeDebugLogs() // 打印debug log
                .build(); //开始构建


        //初始化
        ImageLoader.getInstance().init(config);
    }


    public static DisplayImageOptions getDefautOption() {


        DisplayImageOptions imageOptions = new DisplayImageOptions.Builder()
                .showImageForEmptyUri(R.mipmap.ic_launcher)
                .showImageOnFail(R.mipmap.ic_launcher)
                .showImageOnLoading(R.mipmap.ic_launcher)
                .cacheInMemory(true)
                .cacheOnDisk(true)
                .imageScaleTyp
e(ImageScaleType.EXACTLY_STRETCHED)
                .resetViewBeforeLoading(true)//在加载之前复位一下显示
                .bitmapConfig(Bitmap.Config.RGB_565)//图片的质量
                .considerExifParams(true)///是否考虑JPEG图像EXIF参数(旋转,翻转)
                .build();
        return imageOptions;
    }






}