没有侧滑菜单的一个案例

来源:互联网 发布:kylin apache 编辑:程序博客网 时间:2024/06/07 02:40
//第一个是主布局文件
//activity_main.xml
<LinearLayout 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"    tools:context="com.bawei.administrator.month10_demolianxi01.MainActivity"    android:orientation="vertical">    <FrameLayout        android:layout_width="match_parent"        android:layout_height="0dp"        android:layout_weight="9"        android:id="@+id/frag">    </FrameLayout>    <RadioGroup        android:id="@+id/rg"        android:layout_width="match_parent"        android:layout_height="0dp"        android:layout_weight="1"        android:orientation="horizontal">        <RadioButton            android:id="@+id/btn1"            android:layout_width="0dp"            android:layout_weight="1"            android:button="@null"            android:text="首页"            android:gravity="center"            android:layout_height="match_parent" />        <RadioButton            android:id="@+id/btn2"            android:layout_width="0dp"            android:layout_weight="1"            android:button="@null"            android:text="发现"            android:gravity="center"            android:layout_height="match_parent" />        <RadioButton            android:id="@+id/btn3"            android:layout_width="0dp"            android:text="下载"            android:gravity="center"            android:layout_height="match_parent"            android:layout_weight="1"            android:button="@null" />        <RadioButton            android:id="@+id/btn4"            android:layout_width="0dp"            android:layout_weight="1"            android:text="我的"            android:gravity="center"            android:button="@null"            android:layout_height="match_parent" />    </RadioGroup></LinearLayout>
//然后开始写
FrameLayout里面的Fragment布局文件(只有fragment1里面有东西,所以只有一个)
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    xmlns:app="http://schemas.android.com/apk/res-auto"    android:layout_height="match_parent"    android:orientation="vertical">    <android.support.design.widget.TabLayout        android:id="@+id/tab"        android:layout_width="match_parent"        android:layout_height="40dp"        android:background="@android:color/holo_blue_bright"        app:tabIndicatorColor="@android:color/white"        app:tabSelectedTextColor="@android:color/darker_gray"        app:tabTextColor="@android:color/white"></android.support.design.widget.TabLayout>    <android.support.v4.view.ViewPager        android:id="@+id/vp"        android:layout_width="match_parent"        android:layout_height="match_parent"></android.support.v4.view.ViewPager></LinearLayout>
//MainActivity类
import android.os.Bundle;import android.support.annotation.IdRes;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentTransaction;import android.support.v7.app.AppCompatActivity;import android.widget.FrameLayout;import android.widget.RadioGroup;import com.bawei.fragment.month10_demolianxi01.Fragment01;import com.bawei.fragment.month10_demolianxi01.Fragment02;import com.bawei.fragment.month10_demolianxi01.Fragment03;import com.bawei.fragment.month10_demolianxi01.Fragment04;public class MainActivity extends AppCompatActivity {    private RadioGroup rg;    private FrameLayout frag;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //找到控件        rg = (RadioGroup) findViewById(R.id.rg);        frag = (FrameLayout) findViewById(R.id.frag);        addFragment(new Fragment01());        //RadioGroup的点击事件        rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {            @Override            public void onCheckedChanged(RadioGroup group, @IdRes int checkedId) {                switch (checkedId){                    case R.id.btn1:                        addFragment(new Fragment01());                        break;                    case R.id.btn2:                        addFragment(new Fragment02());                        break;                    case R.id.btn3:                        addFragment(new Fragment03());                        break;                    case R.id.btn4:                        addFragment(new Fragment04());                        break;                }            }        });    }    public void addFragment(Fragment f){        FragmentManager manager=getSupportFragmentManager();        FragmentTransaction fragmentTransaction = manager.beginTransaction();        fragmentTransaction.replace(R.id.frag,f);        fragmentTransaction.commit();    }}



//接下来写Fragment对应的类(也是只有一个,所以写一个)
//这些是导包
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.app.FragmentManager;import android.support.v4.app.FragmentPagerAdapter;import android.support.v4.view.ViewPager;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import com.bawei.administrator.month10_demolianxi01.R;/** * Created by Administrator on 2017/10/24 0024. */public class Fragment01 extends Fragment{    private TabLayout tab;    private ViewPager vp;    private String[] titles = new String[]{"推荐", "课程","实践", "职业路径"};    private Fragment[] fragments;    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {        View v = inflater.inflate(R.layout.fragment1,null);        tab = (TabLayout) v.findViewById(R.id.tab);        vp = (ViewPager) v.findViewById(R.id.vp);//这个是新建一个存放Tablayout对应的fragment的数组        fragments = new Fragment[titles.length];        fragments[0]=new Fragment1();        fragments[1]=new Fragment2();        fragments[2]=new Fragment3();        fragments[3]=new Fragment4();//
ViewPager的内部适配器

vp.setAdapter(new MyFragmentAdapter(getChildFragmentManager()));
//解决轮播图的小圆点刷新增多问题        vp.setOffscreenPageLimit(titles.length);        tab.setupWithViewPager(vp);        return v;    }     class MyFragmentAdapter extends FragmentPagerAdapter {        @Override        public CharSequence getPageTitle(int position) {            return titles[position];        }        public MyFragmentAdapter(FragmentManager fm) {            super(fm);        }        @Override        public Fragment getItem(int position) {            return fragments[position];        }        @Override        public int getCount() {            return titles.length;        }    }}
//接下来写
fragments数组中的第一个fragment(同样是一个)
import android.os.Bundle;import android.os.Handler;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.ListView;import android.widget.ScrollView;import com.bawei.adapter.month10_demolianxi01.MyBaseAdapter;import com.bawei.administrator.month10_demolianxi01.MImage;import com.bawei.administrator.month10_demolianxi01.R;import com.bawei.bean.month10_demolianxi01.Bean;import com.bawei.utils.month10_demolianxi01.ListScrollUtil;import com.bawei.utils.month10_demolianxi01.MyTask;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;/** * Created by Administrator on 2017/10/24 0024. */public class Fragment1 extends Fragment{    private MyBaseAdapter adap;    private Banner banner;    private PullToRefreshScrollView scrollView;    private ListView lv;    private List<String> list = new ArrayList<String>();    private List<Bean.DataScrollBean> list1 = new ArrayList<>();    private int index=1;    private List<Bean.DataBean>data;    private List<Bean.DataBean>listss = new ArrayList<>();    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {        View v = inflater.inflate(R.layout.tuijian,null);        banner = (Banner) v.findViewById(R.id.banner);        scrollView = (PullToRefreshScrollView) v.findViewById(R.id.scroll);        lv = (ListView) v.findViewById(R.id.lv);        intRefreshScrollView();        //initData();        MyTask myTask = new MyTask(new MyTask.Icallbacks() {            @Override            public void updateicall(String str) {                Gson gson = new Gson();                Bean bean = gson.fromJson(str, Bean.class);                list1 = bean.getDataScroll();                for (int i = 0;i<list1.size();i++){                    Log.d("zzz","http://www.93.gov.cn"+list1.get(i).getIMAGEURL());                    list.add("http://www.93.gov.cn"+list1.get(i).getIMAGEURL());                }                //创建一个图片加载器                banner.setImageLoader(new MImage());                //加载出集合中的图片                banner.setImages(list);                //设置是否自动轮播                banner.isAutoPlay(true);                //设置激动轮播的间隔时间                banner.setDelayTime(1000);                //启动banner                banner.start();                listss.addAll(bean.getData());                setAdapters();            }        });        myTask.execute("http://www.93.gov.cn/93app/data.do?channelId=0&startNum=0");        return v;    }    public void setAdapters(){        if(adap==null){            adap=new MyBaseAdapter(listss,getActivity());            lv.setAdapter(adap);        }else{            adap.notifyDataSetChanged();        }    }    public void initData(){        MyTask task=new MyTask(new MyTask.Icallbacks() {            @Override            public void updateicall(String str) {                Gson gson=new Gson();                Bean u=gson.fromJson(str, Bean.class);                data = u.getData();                listss.addAll(data);                setAdapters();            }        });        task.execute("http://api.expoon.com/AppNews/getNewsList/type/1/p/1");    }    public void addToTop() {        MyTask task = new MyTask(new MyTask.Icallbacks() {            @Override            public void updateicall(String str) {                Gson gson = new Gson();                Bean u = gson.fromJson(str, Bean.class);                data = u.getData();                listss.addAll(0,data);            }        });        task.execute("http://api.expoon.com/AppNews/getNewsList/type/1/p/"+index);    }    public void addToBottom(){        index++;        MyTask task=new MyTask(new MyTask.Icallbacks() {            @Override            public void updateicall(String str) {                Gson gson=new Gson();                Bean u=gson.fromJson(str, Bean.class);                data = u.getData();                listss.addAll(data);            }        });        task.execute("http://api.expoon.com/AppNews/getNewsList/type/1/p/"+index);    }    private void intRefreshScrollView() {        //1.设置模式        scrollView.setMode(PullToRefreshBase.Mode.BOTH);        //2.通过调用getLoadingLayoutProxy方法,设置下拉刷新状况布局中显示的文字 ,第一个参数为true,代表下拉刷新        ILoadingLayout headLables = scrollView.getLoadingLayoutProxy(true, false);        headLables.setPullLabel("下拉刷新");        headLables.setRefreshingLabel("正在刷新");        headLables.setReleaseLabel("松开刷新");        //2.设置上拉加载底部视图中显示的文字,第一个参数为false,代表上拉加载更多        ILoadingLayout footerLables = scrollView.getLoadingLayoutProxy(false, true);        footerLables.setPullLabel("上拉加载");        footerLables.setRefreshingLabel("正在载入...");        footerLables.setReleaseLabel("松开加载更多");        //3.设置监听事件        scrollView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ScrollView>() {            @Override            public void onPullDownToRefresh(PullToRefreshBase<ScrollView> refreshView) {                addToTop();//请求网络数据,并更新listview组件                ListScrollUtil. setListViewHeightBasedOnChildren(lv);                scrollView.onRefreshComplete();                refreshComplete();//数据加载完成后,关闭header,footer            }            @Override            public void onPullUpToRefresh(PullToRefreshBase<ScrollView> refreshView) {                addToBottom();//请求网络数据,并更新listview组件                ListScrollUtil. setListViewHeightBasedOnChildren(lv);                scrollView.onRefreshComplete();                refreshComplete();//数据加载完成后,关闭header,footer            }        });    }    /**     * 刷新完成时关闭     */    public void refreshComplete(){        new Handler().postDelayed(new Runnable() {            @Override            public void run() {                scrollView.onRefreshComplete();                setAdapters();            }        },1000);    }}
//属于第一个Fragment的布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    xmlns:ptr="http://schemas.android.com/apk/res-auto"    android:layout_height="match_parent"    android:orientation="vertical"    android:background="#ff0">    <com.handmark.pulltorefresh.library.PullToRefreshScrollView        android:layout_width="match_parent"        android:layout_height="match_parent"        android:id="@+id/scroll"        ptr:ptrAnimationStyle="flip"        ptr:ptrDrawable="@drawable/default_ptr_flip"        ptr:ptrHeaderBackground="#383838"        ptr:ptrHeaderTextColor="#FFFFFF">        <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="240dp"                android:id="@+id/banner"></com.youth.banner.Banner>            <ListView                android:layout_width="match_parent"                android:layout_height="match_parent"                android:id="@+id/lv"></ListView>        </LinearLayout>    </com.handmark.pulltorefresh.library.PullToRefreshScrollView></LinearLayout>

//下面就是第一个Fragment所要配合的类
//MImage类
import android.content.Context;import android.widget.ImageView;import com.youth.banner.loader.ImageLoader;public class MImage extends ImageLoader{    public void displayImage(Context context, Object path, ImageView imageView) {        //下面这些复制就行了,我也不知道什么意思        com.nostra13.universalimageloader.core.ImageLoader instance = com.nostra13.universalimageloader.core.ImageLoader.getInstance();        instance.displayImage((String) path, imageView);    }}
//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.cache.memory.impl.LruMemoryCache;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 cacheDir=this.getExternalCacheDir();//自定义缓存路径        ImageLoaderConfiguration configuration=new ImageLoaderConfiguration.Builder(this)                .memoryCache(new LruMemoryCache(2 * 1024 * 1024))//设置内存缓存区大小                .memoryCacheSize(2 * 1024 * 1024)//设置缓存区大小                .memoryCacheExtraOptions(320,320)//缓存图片最大的宽度与高度 px                .diskCacheSize(50*1024*1024)//设置sd卡缓存的空间大小                .diskCacheFileNameGenerator(new Md5FileNameGenerator())//sd卡缓存图片的命名 使用md5加密方式                .diskCache(new UnlimitedDiscCache(cacheDir))//自定义sd卡的缓存路径                .diskCacheFileCount(100)//缓存文件的最大数量                .writeDebugLogs()//写入日志                .threadPoolSize(3)//线程池                .build();        //imageLoader进行初使化        ImageLoader.getInstance().init(configuration);    }}
//MyBaseAdapter类
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.bawei.administrator.month10_demolianxi01.R;import com.bawei.bean.month10_demolianxi01.Bean;import com.nostra13.universalimageloader.core.DisplayImageOptions;import com.nostra13.universalimageloader.core.ImageLoader;import java.util.List;public class MyBaseAdapter extends BaseAdapter{    private List<Bean.DataBean> list;    private Context context;    DisplayImageOptions options=new DisplayImageOptions.Builder()            .cacheInMemory(true)//进行内存缓存            .cacheOnDisk(true)//进行sd卡缓存            .showImageOnLoading(R.drawable.ic_stub) // 设置正在下载中的图片            .showImageForEmptyUri(R.drawable.ic_empty) //没有请求地址时            .showImageOnFail(R.drawable.ic_error)//下载错误时            .bitmapConfig(Bitmap.Config.RGB_565)//设置图片质量            .build();    public MyBaseAdapter(List<Bean.DataBean> list, Context context) {        this.list = list;        this.context = context;    }    @Override    public int getCount() {        return list.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) {        ViewHolder holder = null;        if(convertView==null){            convertView=View.inflate(context, R.layout.item,null);            holder=new ViewHolder();            holder.tvTitle= (TextView) convertView.findViewById(R.id.tv_title);            holder.img= (ImageView) convertView.findViewById(R.id.img);            convertView.setTag(holder);        }else{            holder=(ViewHolder) convertView.getTag();        }        holder.tvTitle.setText(list.get(position).getTITLE());        if(list.get(position).getIMAGEURL()!=null){            //imageLoader加载图片            ImageLoader.getInstance().displayImage(list.get(position).getIMAGEURL().toString(),holder.img,options);        }else{            holder.img.setImageResource(R.mipmap.ic_launcher);        }        return convertView;    }    class ViewHolder{        TextView tvTitle;        ImageView img;    }}
//
ListScrollUtil类
import android.view.View;import android.view.ViewGroup;import android.widget.ListAdapter;import android.widget.ListView;public class ListScrollUtil {    public static void setListViewHeightBasedOnChildren(ListView listView) {        ListAdapter listAdapter = listView.getAdapter();        if (listAdapter == null) {            // pre-condition            return;        }        int totalHeight = 0;        for (int i = 0; i < listAdapter.getCount(); i++) {            View listItem = listAdapter.getView(i,null , listView);            listItem.measure(0, 0);            totalHeight += listItem.getMeasuredHeight();        }        ViewGroup.LayoutParams params = listView.getLayoutParams();        params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));        listView.setLayoutParams(params);    }}
//
MyTask类
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 MyTask extends AsyncTask<String,Void,String> {    private Icallbacks icallbacks;    private String string;    private MyTask() {    }    public MyTask(Icallbacks icallbacks) {        this.icallbacks = icallbacks;    }    @Override    protected String doInBackground(String... params) {        try {            URL url = new URL(params[0]);            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();            urlConnection.setRequestMethod("GET");            urlConnection.setConnectTimeout(5000);            urlConnection.setReadTimeout(5000);            if (urlConnection.getResponseCode() == 200) {                InputStream inputStream = urlConnection.getInputStream();                string = Streamtosring.tostring(inputStream);            }            return string;        } catch (MalformedURLException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }        return null;    }    @Override    protected void onPostExecute(String s) {        super.onPostExecute(s);        icallbacks.updateicall(s);    }    public interface Icallbacks {        void updateicall(String str);    }}
//
Streamtosring类
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;public class Streamtosring {    public static String tostring(InputStream s){        StringBuilder sb=new StringBuilder();        BufferedReader br=new BufferedReader(new InputStreamReader(s));        String con;        try {            while((con=br.readLine())!=null){                sb.append(con);            }            return sb.toString();        } catch (IOException e) {            e.printStackTrace();        }        return null;    }}