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); } }