网络判断+网络请求+TabLayout+XListview+多条目加载.

来源:互联网 发布:信天游炒股软件 编辑:程序博客网 时间:2024/05/22 00:31

示例图
这里写图片描述
添加权限


添加依赖库
xlistview
TabLayout的依赖
布局
主activity布局

<RelativeLayout 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:layout_height="match_parent"    android:orientation="vertical"    tools:context="com.example.sweek02.MainActivity">    <RadioGroup        android:id="@+id/rel_navigate"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_alignParentBottom="true"        android:orientation="horizontal">        <RadioButton            android:id="@+id/rb_shouye"            android:layout_width="0dp"            android:layout_height="wrap_content"            android:layout_weight="1"            android:background="@drawable/rb_selector"            android:button="@null"            android:checked="true"            android:gravity="center"            android:padding="3dp"            android:text="首页" />        <RadioButton            android:id="@+id/rb_xiangfa"            android:layout_width="0dp"            android:layout_height="wrap_content"            android:layout_weight="1"            android:background="@drawable/rb_selector"            android:button="@null"            android:gravity="center"            android:padding="3dp"            android:text="想法" />        <RadioButton            android:id="@+id/rb_shichang"            android:layout_width="0dp"            android:layout_height="wrap_content"            android:layout_weight="1"            android:background="@drawable/rb_selector"            android:button="@null"            android:gravity="center"            android:padding="3dp"            android:text="市场" />        <RadioButton            android:id="@+id/rb_tongzhi"            android:layout_width="0dp"            android:layout_height="wrap_content"            android:layout_weight="1"            android:background="@drawable/rb_selector"            android:button="@null"            android:gravity="center"            android:padding="3dp"            android:text="通知" />        <RadioButton            android:id="@+id/rb_gengduo"            android:layout_width="0dp"            android:layout_height="wrap_content"            android:layout_weight="1"            android:background="@drawable/rb_selector"            android:button="@null"            android:gravity="center"            android:padding="3dp"            android:text="更多" />    </RadioGroup><FrameLayout    android:layout_width="match_parent"    android:layout_height="match_parent"    android:layout_above="@+id/rel_navigate"    android:id="@+id/fr"    android:layout_marginTop="50dp"    ></FrameLayout><EditText    android:layout_width="match_parent"    android:layout_height="50dp"    android:id="@+id/ed"    android:layout_alignParentTop="true"    android:hint="搜索"    /></RelativeLayout>

shouye布局

<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">    <android.support.design.widget.TabLayout        android:layout_width="match_parent"        android:layout_height="40dp"        app:tabGravity="center"        app:tabIndicatorColor="@color/colorAccent"        app:tabMode="scrollable"        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>

fragmens

<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:textSize="30sp"    android:textColor="#f0f"    /></LinearLayout>

dongtai和faxian布局

<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:textColor="#f95"    android:textSize="30dp"    android:text="动态"    /></LinearLayout>

remen布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical" android:layout_width="match_parent"    android:layout_height="match_parent"><com.example.sweek02.view.XListView    android:layout_width="match_parent"    android:layout_height="match_parent"    android:id="@+id/xlv"    ></com.example.sweek02.view.XListView></LinearLayout>

多条目布局自己写
xlistview布局复制
Activity方法

public class MainActivity extends AppCompatActivity {    private RadioGroup rg;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        rg = (RadioGroup) findViewById(R.id.rel_navigate);        rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {            @Override            public void onCheckedChanged(RadioGroup group, @IdRes int checkedId) {                switch (checkedId){                    case R.id.rb_shouye:                        getSupportFragmentManager().beginTransaction().replace(R.id.fr,new Shouye()).commit();                        break;                    case R.id.rb_xiangfa:                        addFragment("想法");                        break;                    case R.id.rb_shichang:                        addFragment("市场");                        break;                    case R.id.rb_tongzhi:                        addFragment("通知");                        break;                    case R.id.rb_gengduo:                        addFragment("更多");                        break;                }            }        });        getSupportFragmentManager().beginTransaction().replace(R.id.fr,new Shouye()).commit();    }    public void addFragment(String str){        Bundle bundle = new Bundle();        bundle.putString("key",str);        Fragmens fragmens = new Fragmens();        fragmens.setArguments(bundle);        getSupportFragmentManager().beginTransaction().replace(R.id.fr,fragmens).commit();    }}

shouyeFragment

public class Shouye extends Fragment {    private ViewPager viewPager;    private TabLayout tabLayout;    private List<String> lists=new ArrayList<String>();    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {        View v = inflater.inflate(R.layout.shouye, container, false);        viewPager = (ViewPager) v.findViewById(R.id.vp);        tabLayout = (TabLayout) v.findViewById(R.id.mytab);        //tab标题信息        intTabData();        //设置适配器 ,,得到子fragment的管理者,使用getChildFragmentManager        viewPager.setAdapter(new MyAdapter(getChildFragmentManager()));        //建立关联        tabLayout.setupWithViewPager(viewPager);        //指定加载的页数 http://blog.csdn.net/qq_29134495/article/details/51548002        viewPager.setOffscreenPageLimit(lists.size());        return v;    }    private void intTabData() {        lists.add("动态");        lists.add("热门");        lists.add("发现");    }    class  MyAdapter extends FragmentPagerAdapter {        public MyAdapter(FragmentManager fm) {            super(fm);        }        //获取tab导航文本        @Override        public CharSequence getPageTitle(int position) {            return lists.get(position);        }        @Override        public Fragment getItem(int position) {            Fragment fragment =null;            switch (position){                case 0:                    fragment = new Dongtai();                    break;                case 1:                    fragment = new Remen();                    break;                case 2:                    fragment = new Faxian();                    break;                default:                    break;            }            return fragment;        }        @Override        public int getCount() {            return lists.size();        }    }}

Fragmens

   public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {        View v = inflater.inflate(R.layout.fragmens, container, false);        TextView tv = (TextView) v.findViewById(R.id.tv);        Bundle bundle = getArguments();        tv.setText(bundle.getString("key"));        return v;    }

faixan和dongtai的布局

 public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {        View v = inflater.inflate(R.layout.faxian, container, false);        return v;    }

复制xlistview代码导进去
remen

public class Remen extends Fragment {    private List<Resulte.ResultsBean> list=new ArrayList<>();    private XListView xlv;    private  int page=1;    private  int   type=1;    private  String url="http://gank.io/api/data/Android/10/"+page;    private Handler handler=new Handler(){        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            if (type==1){                xlv.stopRefresh();                Date date=new Date(System.currentTimeMillis());                SimpleDateFormat format=new SimpleDateFormat("yyyy_MM_dd HH:mm:ss");                String format1 = format.format(date);                xlv.setRefreshTime(format1);            }if (type==2){                xlv.stopLoadMore();            }        }    };    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {        View v = inflater.inflate(R.layout.remen, container, false);       xlv  = (XListView) v.findViewById(R.id.xlv);        boolean result= NetTypeUtils.isConn(getActivity());        if(result){            //进行数据请求            inittype();            Toast.makeText(getActivity(),"有网络",Toast.LENGTH_SHORT).show();        }else{            NetTypeUtils.openNetSettingDg(getActivity());            Toast.makeText(getActivity(),"无网络",Toast.LENGTH_SHORT).show();        }        xlv.setPullLoadEnable(true);        xlv.setPullRefreshEnable(true);        xlv.setXListViewListener(new XListView.IXListViewListener() {            @Override            public void onRefresh() {                type=1;                page=1;                inittype();            }            @Override            public void onLoadMore() {                type=2;                page++;                inittype();            }        });        return v;    }    public  void  inittype() {        class MyTask extends AsyncTask<String, Void, String> {            private String s = "";            @Override            protected String doInBackground(String... params) {                try {                    //1.创建URL                    URL url = new URL(params[0]);                    //2.打开连接                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();                    //3.设置请求方法                    connection.setRequestMethod("GET");//大写                    connection.setConnectTimeout(2000);                    connection.setReadTimeout(2000);                    if (connection.getResponseCode() == 200) {                        InputStream stream = connection.getInputStream();                        s = StreamToString.streamToStr(stream, "utf-8");                    }                } catch (IOException e) {                    e.printStackTrace();                }                return s;            }            @Override            protected void onPostExecute(String s) {                super.onPostExecute(s);                Gson gson = new Gson();                Resulte resulte = gson.fromJson(s, Resulte.class);                if (type==1){                    list.clear();                    list.addAll(resulte.getResults());                }else {                    list.addAll(resulte.getResults());                }                xlv.setAdapter(new MyAdapter(getActivity(), list));                handler.sendEmptyMessageDelayed(0,1000);            }        }        new  MyTask().execute(url);    }}

MyAdapter

public class MyAdapter extends BaseAdapter {    private DisplayImageOptions options;    Context context;    private List<Resulte.ResultsBean> list;    int TYTLE_ONLY = 0;//只有文字的形式    int IMAGE_LEFT = 1;//表示图片在左边,文字在右边    public MyAdapter(Context context, List<Resulte.ResultsBean> list) {        this.context = context;        this.list = list;        options = new DisplayImageOptions.Builder()                .cacheInMemory(true)//使用内存缓存                .cacheOnDisk(true)//使用磁盘缓存                .showImageOnLoading(R.mipmap.ic_launcher)//设置正在下载的图片                .showImageForEmptyUri(R.mipmap.ic_launcher)//url为空或请求的资源不存在时                .showImageOnFail(R.mipmap.ic_launcher)//下载失败时显示的图片                .bitmapConfig(Bitmap.Config.RGB_565)//设置图片显示的色彩模式                .displayer(new RoundedBitmapDisplayer(20))//设置圆角图片                .build();    }    @Override    public int getCount() {        return list.size();    }    @Override    public Object getItem(int position) {        return list.get(position);    }    @Override    public long getItemId(int position) {        return position;    }    @Override    public int getViewTypeCount() {        return 2;    }    @Override    public int getItemViewType(int position) {        List<String> pic = list.get(position).getImages();        if (pic == null) {            return TYTLE_ONLY;        } else if (pic != null && pic.size() == 1) {//集合长度是1            return IMAGE_LEFT;//返回图片类型){        } else {            return TYTLE_ONLY;        }    }    @Override    public View getView(int position, View convertView, ViewGroup parent) {        int type = getItemViewType(position);        if (type == IMAGE_LEFT) {            ViewHolderi holderi;            if (convertView == null) {                holderi = new ViewHolderi();                convertView = View.inflate(context, R.layout.item_img, null);                holderi.img_tv = (TextView) convertView.findViewById(R.id.img_tv);                holderi.img = (ImageView) convertView.findViewById(R.id.img);                convertView.setTag(holderi);            } else {                holderi = (ViewHolderi) convertView.getTag();            }            holderi.img_tv.setText(list.get(position).getDesc());            ImageLoader.getInstance().displayImage(list.get(position).getImages().get(0), holderi.img, options);            return convertView;        } else if (type == TYTLE_ONLY) {            ViewHolder holder;            if (convertView == null) {                holder = new ViewHolder();                convertView = View.inflate(context, R.layout.item_tx, null);                holder.tv = (TextView) convertView.findViewById(R.id.tv);                convertView.setTag(holder);            } else {                holder = (ViewHolder) convertView.getTag();            }            holder.tv.setText(list.get(position).getDesc());            return convertView;        }        return  convertView;    }    class   ViewHolder{        TextView tv;    }   class   ViewHolderi{        ImageView img;        TextView img_tv;    }}

bean类自己复制封住在首页中有接口.
MyApplication

public class MyApplication extends Application {    @Override    public void onCreate() {        super.onCreate();        //sd卡上缓存目录-android指定的缓存路径 android/data/<package>/cache        File cachefile=getExternalCacheDir();        //自定义的缓存路径//        File cachefile=new File(Environment.getExternalStorageDirectory().getPath()+"/abc/a");        //进行框架初使化操作-全局配置        ImageLoaderConfiguration configuration=new ImageLoaderConfiguration.Builder(this)                .memoryCacheExtraOptions(480, 800)//缓存图片最大的长和宽                .threadPoolSize(2)//线程池的数量                .threadPriority(4)                .memoryCacheSize(5*1024*1024)//设置内存缓存区大小                .diskCacheSize(20*1024*1024)//设置sd卡缓存区大小                .diskCache(new UnlimitedDiscCache(cachefile))//自定义磁盘缓存目录                .writeDebugLogs()//打印日志内容                .diskCacheFileNameGenerator(new Md5FileNameGenerator())//给缓存的文件名进行md5加密处理                .build();        ImageLoader.getInstance().init(configuration);    }}