网络请求 + DrawerLayout + PullToFefresh + Fragment
来源:互联网 发布:棕榈油 知乎 编辑:程序博客网 时间:2024/06/01 09:48
首先加权限,并且添加需要的依赖包
//网络权限<uses-permission android:name="android.permission.INTERNET"></uses-permission>//判断网络的权限<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
主函数代码
import android.app.Activity;import android.content.Context;import android.net.ConnectivityManager;import android.net.NetworkInfo;import android.os.Bundle;import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentTransaction;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;import android.widget.Toast;import com.bwie.lianxi.fragment.hangqing;import com.bwie.lianxi.fragment.jiaoyi;import com.bwie.lianxi.fragment.shouye;import com.bwie.lianxi.fragment.zixuan;import com.bwie.lianxi.fragment.zixun;public class MainActivity extends AppCompatActivity { //全局变量 private Button btn_shouye; private Button btn_zixuan; private Button btn_hangqing; private Button btn_zixun; private Button btn_jiaoyi; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //判断网络是否可用 if (isNetworkAvailable(MainActivity.this)) { //吐司显示当前有可用的网络 Toast.makeText(getApplicationContext(), "当前有可用网络!", Toast.LENGTH_LONG).show(); } else { //吐司显示当前没有可用网络 Toast.makeText(getApplicationContext(), "当前没有可用网络!", Toast.LENGTH_LONG).show(); } //初始化控件 btn_shouye = (Button) findViewById(R.id.shouye); btn_zixuan = (Button) findViewById(R.id.zixuan); btn_hangqing = (Button) findViewById(R.id.hangqing); btn_zixun = (Button) findViewById(R.id.zixun); btn_jiaoyi = (Button) findViewById(R.id.jiaoyi); //初始化界面 FragmentManager manager = getSupportFragmentManager(); FragmentTransaction transaction = manager.beginTransaction(); transaction.replace(R.id.frag, new shouye()); transaction.commit(); //按钮的点击事件 btn_shouye.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //首页 FragmentManager manager = getSupportFragmentManager(); FragmentTransaction transaction = manager.beginTransaction(); transaction.replace(R.id.frag, new shouye()); transaction.commit(); } }); //按钮的点击事件 btn_zixuan.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //自选页 FragmentManager manager = getSupportFragmentManager(); FragmentTransaction transaction = manager.beginTransaction(); transaction.replace(R.id.frag, new zixuan()); transaction.commit(); } }); //按钮的点击事件 btn_hangqing.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //行情页 FragmentManager manager = getSupportFragmentManager(); FragmentTransaction transaction = manager.beginTransaction(); transaction.replace(R.id.frag, new hangqing()); transaction.commit(); } }); //按钮的点击事件 btn_zixun.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //资讯页 FragmentManager manager = getSupportFragmentManager(); FragmentTransaction transaction = manager.beginTransaction(); transaction.replace(R.id.frag, new zixun()); transaction.commit(); } }); //按钮的点击事件 btn_jiaoyi.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //交易页 FragmentManager manager = getSupportFragmentManager(); FragmentTransaction transaction = manager.beginTransaction(); transaction.replace(R.id.frag, new jiaoyi()); transaction.commit(); } }); } public boolean isNetworkAvailable(Activity activity) { Context context = activity.getApplicationContext(); // 获取手机所有连接管理对象(包括对wi-fi,net等连接的管理) ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); if (connectivityManager == null) { //如果等于空,则返回false return false; } else { //如果不为空,获取NetworkInfo对象 NetworkInfo[] networkInfo = connectivityManager.getAllNetworkInfo(); if (networkInfo != null && networkInfo.length > 0) { for (int i = 0; i < networkInfo.length; i++) { System.out.println(i + "===状态===" + networkInfo[i].getState()); System.out.println(i + "===类型===" + networkInfo[i].getTypeName()); // 判断当前网络状态是否为连接状态 if (networkInfo[i].getState() == NetworkInfo.State.CONNECTED) { return true; } } } } return false; }}
主页面布局
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v4.widget.DrawerLayout android:layout_width="match_parent" android:layout_height="match_parent"> <RelativeLayout android:layout_width="200dp" android:layout_height="match_parent" android:layout_gravity="left" android:background="#fff"> <ImageView android:id="@+id/dl_img" android:layout_width="50dp" android:layout_height="50dp" android:padding="10dp" android:src="@mipmap/ic_launcher" /> <TextView android:id="@+id/name1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/dl_img" android:gravity="center" android:padding="10dp" android:text="aaaaaaa" /> <TextView android:id="@+id/xw" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/name1" android:gravity="center" android:padding="10dp" android:text="客服热线" /> <TextView android:id="@+id/yl" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/xw" android:gravity="center" android:padding="10dp" android:text="营业部网点" /> <TextView android:id="@+id/sh" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/yl" android:gravity="center" android:padding="10dp" android:text="系统设置" /> <TextView android:id="@+id/js" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/sh" android:gravity="center" android:padding="10dp" android:text="换肤" /> </RelativeLayout> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:id="@+id/ll" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:gravity="center" android:orientation="horizontal"> <Button android:id="@+id/shouye" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" android:text="首页" /> <Button android:id="@+id/zixuan" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" android:text="自选" /> <Button android:id="@+id/hangqing" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" android:text="行情" /> <Button android:id="@+id/zixun" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" android:text="资讯" /> <Button android:id="@+id/jiaoyi" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" android:text="交易" /> </LinearLayout> <FrameLayout android:id="@+id/frag" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_above="@+id/ll"></FrameLayout> </RelativeLayout> </android.support.v4.widget.DrawerLayout></RelativeLayout>
首页代码(次要的)
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 com.bwie.lianxi.R;public class shouye extends Fragment { @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View v = View.inflate(getActivity(), R.layout.shouye, null); return v; }}
首页的布局文件(次要的)
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#f0f"></RelativeLayout>
资讯页代码
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.FragmentPagerAdapter;import android.support.v4.view.ViewPager;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import com.bwie.lianxi.R;import java.util.ArrayList;import java.util.List;public class zixun extends Fragment { //全局变量 TabLayout tab; private List<String> list; ViewPager vp; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { //初始化视图 View v = View.inflate(getActivity(), R.layout.zixun, null); //初始化控件 tab = v.findViewById(R.id.tab); vp = v.findViewById(R.id.vp); //创建集合 list = new ArrayList<>(); //向集合中添加数据 list.add("数据新闻"); list.add("快讯"); list.add("头条"); list.add("精编公告"); list.add("美股"); list.add("港股"); list.add("基金"); list.add("理财"); //ViewPager的监听事件 vp.setAdapter(new FragmentPagerAdapter(getActivity().getSupportFragmentManager()) { @Override public CharSequence getPageTitle(int position) { return list.get(position); } @Override public Fragment getItem(int position) { //获取数据 Fragments fragments = new Fragments(); Bundle bundle = new Bundle(); //判断 if (list.get(position).endsWith("数据新闻")) { bundle.putString("name", "keji"); } else if (list.get(position).endsWith("快讯")) { bundle.putString("name", "startup"); } else if (list.get(position).endsWith("头条")) { bundle.putString("name", "apple"); } else if (list.get(position).endsWith("精编公告")) { bundle.putString("name", "it"); } else if (list.get(position).endsWith("美股")) { bundle.putString("name", "vr"); } else if (list.get(position).endsWith("港股")) { bundle.putString("name", "health"); } else if (list.get(position).endsWith("基金")) { bundle.putString("name", "meinv"); } else if (list.get(position).endsWith("理财")) { bundle.putString("name", "it"); } //传递数据 fragments.setArguments(bundle); return fragments; } @Override public int getCount() { return list.size(); } }); //绑定 tab.setupWithViewPager(vp); //返回视图 return v; }}
资讯页布局
<?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:layout_width="match_parent" 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="wrap_content" android:fillViewport="false" app:tabIndicatorColor="#052efc" app:tabIndicatorHeight="5dp" app:tabMode="scrollable" app:tabSelectedTextColor="#f9ec03" app:tabTextColor="#f204ce"></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:layout_below="@+id/tab"></android.support.v4.view.ViewPager></LinearLayout>
Fragments类
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.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.ListView;import android.widget.TextView;import com.bwie.lianxi.R;import com.bwie.lianxi.RootBean;import com.google.gson.Gson;import com.jwenfeng.library.pulltorefresh.BaseRefreshListener;import com.jwenfeng.library.pulltorefresh.PullToRefreshLayout;import com.nostra13.universalimageloader.core.ImageLoader;import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.URL;import java.util.List;public class Fragments extends Fragment { //全局变量 List<RootBean.NewslistBean> list; MyAdapter myAdapter; //创建Handler private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { if (msg.what == 0) { RootBean bean = (RootBean) msg.obj; list = bean.getNewslist(); myAdapter = new MyAdapter(); list_view.setAdapter(myAdapter); } } }; PullToRefreshLayout pull_1; private int shu = 10; String s; private String path; ListView list_view; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { //初始化视图 View v = View.inflate(getActivity(), R.layout.fragment_layout, null); //初始化控件 pull_1 = v.findViewById(R.id.pull_1); list_view = v.findViewById(R.id.list_view); //获取数据 Bundle bundle = getArguments(); s = bundle.getString("name", "keji"); streamToString(s); //PullToRefresh的监听事件 pull_1.setRefreshListener(new BaseRefreshListener() { //下拉刷新 @Override public void refresh() { handler.postDelayed(new Runnable() { @Override public void run() { shu++; path = "http://api.tianapi.com/" + s + "/?key=51f42ae57be18f5f5d7b402ef0bc64aa&num=" + shu; Log.i("aaaaaaaaa", path); streamToString(s); //刷新适配器 //myAdapter.notifyDataSetChanged(); //停止下拉刷新 pull_1.finishRefresh(); } }, 3000); } //上拉加载 @Override public void loadMore() { handler.postDelayed(new Runnable() { @Override public void run() { shu++; path = "http://api.tianapi.com/" + s + "/?key=51f42ae57be18f5f5d7b402ef0bc64aa&num=" + shu; streamToString(s); //刷新适配器 //myAdapter.notifyDataSetChanged(); //停止上拉加载 pull_1.finishLoadMore(); } }, 3000); } }); return v; } //适配器 class MyAdapter extends BaseAdapter { @Override public int getCount() { return list.size(); } @Override public Object getItem(int i) { return null; } @Override public long getItemId(int i) { return 0; } @Override public View getView(int i, View view, ViewGroup viewGroup) { ViewHolder holder; if (view == null) { view = view.inflate(getActivity(), R.layout.item_01, null); holder = new ViewHolder(); holder.image_view = view.findViewById(R.id.image_view); holder.text_view = view.findViewById(R.id.text_view); view.setTag(holder); } else { holder = (ViewHolder) view.getTag(); } //获取文字 holder.text_view.setText(list.get(i).getTitle()); //获取图片 ImageLoader.getInstance().displayImage(list.get(i).getPicUrl(), holder.image_view); return view; } class ViewHolder { ImageView image_view; TextView text_view; } } //网络请求 private void streamToString(final String s) { new Thread() { @Override public void run() { //判断 if (path == null) { path = "http://api.tianapi.com/" + s + "/?key=51f42ae57be18f5f5d7b402ef0bc64aa&num=" + shu; } try { //获取接口 URL url = new URL(path); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); //设置 connection.setRequestMethod("GET"); connection.setReadTimeout(5000); connection.setConnectTimeout(5000); //判断请求码 if (connection.getResponseCode() == 200) { InputStream stream = connection.getInputStream(); String json = zhuan(stream, "utf-8"); //解析 Gson gson = new Gson(); RootBean fromJson = gson.fromJson(json, RootBean.class); //发送一个消息 Message message = Message.obtain(); message.what = 0; message.obj = fromJson; handler.sendMessage(message); } } catch (Exception e) { e.printStackTrace(); } super.run(); } }.start(); } //转码 private String zhuan(InputStream stream, String s) { try { InputStreamReader inputStreamReader = new InputStreamReader(stream, s); BufferedReader reader = new BufferedReader(inputStreamReader); String ss = null; StringBuilder builder = new StringBuilder(); while ((ss = reader.readLine()) != null) { builder.append(ss); } inputStreamReader.close(); return builder.toString(); } catch (Exception e) { e.printStackTrace(); } return null; }}
图片的二次采样
import android.app.Application;import com.nostra13.universalimageloader.core.DisplayImageOptions;import com.nostra13.universalimageloader.core.ImageLoader;import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;public class Img extends Application { @Override public void onCreate() { //图片的二次采样 DisplayImageOptions options = new DisplayImageOptions .Builder() .showImageOnLoading(R.mipmap.ic_launcher) .displayer(new FadeInBitmapDisplayer(2000)) .cacheInMemory(true) .cacheOnDisc(true) .build(); ImageLoaderConfiguration configuration = new ImageLoaderConfiguration .Builder(this) .defaultDisplayImageOptions(options) .threadPoolSize(5) .build(); ImageLoader.getInstance().init(configuration); super.onCreate(); }}
fragment_layout.xml
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <com.jwenfeng.library.pulltorefresh.PullToRefreshLayout android:id="@+id/pull_1" android:layout_width="match_parent" android:layout_height="match_parent"> <ListView android:id="@+id/list_view" android:layout_width="match_parent" android:layout_height="match_parent"></ListView> </com.jwenfeng.library.pulltorefresh.PullToRefreshLayout></RelativeLayout>
item_01.xml
<?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="wrap_content" android:orientation="horizontal"> <ImageView android:id="@+id/image_view" android:layout_width="70dp" android:layout_height="70dp" android:padding="10dp" android:src="@mipmap/ic_launcher" /> <TextView android:id="@+id/text_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="10dp" android:text="aaaaaaaa" /></LinearLayout>
阅读全文
2 0
- 网络请求 + DrawerLayout + PullToFefresh + Fragment
- fragment网络请求getActivity()
- TabLayout + Fragment + 网络请求
- ANDROID drawerlayout+fragment侧滑
- PullToRefreshListView+Tablayout+Fragment+DrawerLayout
- Fragment+ViewPager网络请求数据问题
- Get方式请求网络数据+Fragment+SharedPreferences
- Fragment加网络请求数据HttpClient
- 网络请求(viewPager,Fragment,ListView)
- 网络请求与Fragment的使用
- Toolbar+DrawerLayout+Fragment结合使用
- drawerlayout+tablelayout+fragment+轮播
- DrawerLayout+Tablayout+PullTofresh+Fragment(Viewpage)
- DrawerLayout+Tablayout+PullTofresh+Fragment(Viewpage)
- SlidingMenu ViewPager Fragment GSON 网络解析 网络请求 ListView
- DrawerLayout,TabLayout和xlistview网络请求数据(类似今日头条)
- Fragment 网络数据请求最好放在setUserVisibleHint中
- FragMent,ViewPager 实现每个页面都请求网络。
- DirectX 11 在把矩阵(例如View矩阵)传给shader之前为什么要进行转置(相关引擎坐标系及左乘与右乘的区别总结)
- 1.进入JAVA的世界
- OkHttp完全解析(七)SPDY协议详细介绍
- WebView 详解
- *【bzoj 1024】生日快乐(DFS)
- 网络请求 + DrawerLayout + PullToFefresh + Fragment
- java操作redis数据库
- Machine Learning part0---拿到数据后的第一件事该干什么?
- 导入CardView时错误
- 学习golang
- BZOJ1076 状压+期望
- 文字超过div(或者input框等)宽度用省略号显示css
- 排列 组合
- spring 注解与xml双重配置是否可行?