小Demo--狸菇凉_
来源:互联网 发布:美工穿什么衣服 编辑:程序博客网 时间:2024/06/18 04:36
此文章使用mvp模式写的()里的都是类 一、有Model包里的bean包(Bean、ItemBean和SpacesItemDecoration)和utils包(MyImageLoadAsyncTask和Utils) 二、presenter包里的(BasePresenter和F1Presenter) 三、view包里的activity包(MainActivity和More)、adapter包(MyCarouselAdapter、MyAdapter、MyRecy1Adapter、MyRecy2Adapter和MyGridAdapter) application包(MyApplication)、 adapter包(Fragment_one、Fragment_two、Fragment_three、Fragment_four) 和iview包是接口(IMVPView、MainIView和MyOnclicklistener) 一、model包里 1.Model包里的 ①Bean类我就不写了,里面需要的记得序列化(Serializable) ②ItemBean 类 public class ItemBean { private String text; private boolean select; public ItemBean(String text, boolean select) { this.text = text; this.select = select; } public String getText() { return text; } public void setText(String text) { this.text = text; } public boolean isSelect() { return select; } public void setSelect(boolean select) { this.select = select; }} ③.SpacesItemDecoration类public class SpacesItemDecoration extends RecyclerView.ItemDecoration { private int space; public SpacesItemDecoration(int space) { this.space = space; } @Override public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { outRect.left = space; outRect.right = space; outRect.bottom = space; }} 2.utils包里的 ①MyImageLoadAsyncTask类 public class MyImageLoadAsyncTask extends AsyncTask<String,Void,Bitmap> { public interface ImageCallBack{ void callBitmap(Bitmap bitmap); } //定义变量记住调用者所传递进来的回调监听对象 private ImageCallBack imageCallBack; //构造方法 public MyImageLoadAsyncTask(ImageCallBack imageCallBack){ this.imageCallBack = imageCallBack; } @Override protected void onPostExecute(Bitmap bitmap) { super.onPostExecute(bitmap); if (bitmap != null ){ } } @Override protected Bitmap doInBackground(String... params) { String param = params[0]; try { URL url = new URL(param); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setReadTimeout(5000); connection.setConnectTimeout(5000); int responseCode = connection.getResponseCode(); if (responseCode == 200){ InputStream inputStream = connection.getInputStream(); return BitmapFactory.decodeStream(inputStream); } } catch (Exception e) { e.printStackTrace(); } return null; }} ②Utils类 public class Utils { public static <T>void getHttp(String url, final GetUtils getUtils, final Class<T> clazz){ RequestParams requestParams = new RequestParams(url); x.http().get(requestParams, new Callback.CommonCallback<String>() { @Override public void onSuccess(String result) { Gson gson = new Gson(); T t = gson.fromJson(result, clazz); getUtils.CallBack(t); } @Override public void onError(Throwable ex, boolean isOnCallback) { } @Override public void onCancelled(CancelledException cex) { } @Override public void onFinished() { } }); } public static void setImage(String url, ImageView imageView){ DisplayImageOptions build = new DisplayImageOptions.Builder() .showImageOnLoading(R.mipmap.ic_launcher) .showImageOnFail(R.mipmap.ic_launcher) .cacheOnDisk(true) .cacheInMemory(false) .build(); ImageLoader.getInstance().displayImage(url, imageView, build); } public interface GetUtils{ <T>void CallBack(T t); }}二、presenter层 1.BasePresenter类 public class BasePresenter <T extends IMVPView> { private T tbase; public T getTbase() { return tbase; } public void setTbase(T tbase) { this.tbase = tbase; }} 2.F1Presenter类public class F1Presenter extends BasePresenter<MainIView> { public void getData() { Utils.getHttp(url, new Utils.GetUtils() { @Override public <T>void CallBack(T t) { getTbase().CallBack((Bean) t); } },Bean.class); }} 三、view层 1.activity包 ①MainActivity类 public class MainActivity extends AppCompatActivity { private ViewPager view_pager; private ArrayList<Fragment> fragments; private MyFragement_one myFragement_one; private MyFragement_two myFragement_two; private MyFragement_three myFragement_three; private MyFragement_four myFragement_four; private RadioButton rb1; private RadioButton rb2; private RadioButton rb3; private RadioButton rb4; private RadioGroup rg; private MyAdapter myAdapter; private int index; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //联网判断 AlertDialog.Builder builder = new AlertDialog.Builder(this); //检查用户的网络情况 ConnectivityManager cm=(ConnectivityManager) MainActivity.this.getSystemService(Context.CONNECTIVITY_SERVICE); //返回當前可用網絡信息 NetworkInfo info=cm.getActiveNetworkInfo(); if(info!=null&&info.isConnected()){ Toast.makeText(MainActivity.this, "网络可用", Toast.LENGTH_SHORT).show(); }else{ Toast.makeText(MainActivity.this, "网络不可用", Toast.LENGTH_SHORT).show(); builder.setTitle("提醒"); builder.setMessage("当前网络不可用,点击确定设置网络"); builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Intent intent=new Intent(); intent.setClassName("com.android.settings", "com.android.settings.Settings"); startActivity(intent); } } ); builder.create().show(); } setContentView(R.layout.activity_main); //找视图 initView(); //加载数据 initData(); //点击监听 initClick(); } private void initClick() { view_pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { switch (position) { case 0: { rb1.setChecked(true); } break; case 1: { rb2.setChecked(true); } break; case 2: { rb3.setChecked(true); } break; case 3: { rb4.setChecked(true); } break; } } @Override public void onPageScrollStateChanged(int state) { } }); //rg 点击rg跳转 rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, @IdRes int checkedId) { switch (checkedId){ case R.id.rb1: index = 0; break; case R.id.rb2: index = 1; break; case R.id.rb3: index = 2; break; case R.id.rb4: index = 3; break; } if (view_pager.getCurrentItem() != index){// view_pager.setCurrentItem(index,false); view_pager.setCurrentItem(index); } } }); } private void initData() { myFragement_one = new MyFragement_one(); myFragement_two = new MyFragement_two(); myFragement_three = new MyFragement_three(); myFragement_four = new MyFragement_four(); fragments = new ArrayList<>(); fragments.add(myFragement_one); fragments.add(myFragement_two); fragments.add(myFragement_three); fragments.add(myFragement_four); myAdapter = new MyAdapter(getSupportFragmentManager(),fragments); view_pager.setAdapter(myAdapter); } private void initView() { view_pager = (ViewPager) findViewById(R.id.view_pager); rb1 = (RadioButton) findViewById(R.id.rb1); rb2 = (RadioButton) findViewById(R.id.rb2); rb3 = (RadioButton) findViewById(R.id.rb3); rb4 = (RadioButton) findViewById(R.id.rb4); rg = (RadioGroup) findViewById(R.id.rg); } } ②More public class More extends AppCompatActivity implements MainIView, MyOnclicklistener { private TextView my; private RecyclerView recy1; private TextView other; private RecyclerView recy2; private GridLayoutManager gridLayoutManager1; private MyRecy1Adapter myRecy1Adapter; private GridLayoutManager gridLayoutManager2; private MyRecy2Adapter myRecy2Adapter; private ArrayList<Bean.ResultBean.CategoryBean> one; private ArrayList<Bean.ResultBean.NationsBean> two; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.mychannel); initView(); initData(); } //view private void initView() { my = (TextView) findViewById(R.id.my); recy1 = (RecyclerView) findViewById(R.id.recy1); other = (TextView) findViewById(R.id.other); recy2 = (RecyclerView) findViewById(R.id.recy2); int spacingInPixels = 30; // recy1的初始化工作 gridLayoutManager1 = new GridLayoutManager(this, 3); recy1.setLayoutManager(gridLayoutManager1); recy1.addItemDecoration(new SpacesItemDecoration(spacingInPixels)); myRecy1Adapter = new MyRecy1Adapter(this); myRecy1Adapter.setOnclickListener(this); recy1.setAdapter(this.myRecy1Adapter); // recy2的初始化工作 gridLayoutManager2 = new GridLayoutManager(this, 3); recy2.setLayoutManager(gridLayoutManager2); //设置recycleview之间的间距 recy2.addItemDecoration(new SpacesItemDecoration(spacingInPixels)); myRecy2Adapter = new MyRecy2Adapter(More.this); myRecy2Adapter.setOnclickListener(this); recy2.setAdapter(myRecy2Adapter); } private void initData() { Intent intent = getIntent(); if (intent != null) { one = (ArrayList<Bean.ResultBean.CategoryBean>) intent.getSerializableExtra("one"); two = (ArrayList<Bean.ResultBean.NationsBean>) intent.getSerializableExtra("two"); myRecy1Adapter.setData(one); myRecy1Adapter.notifyDataSetChanged(); myRecy2Adapter.setData(two); myRecy2Adapter.notifyDataSetChanged(); } } //重写的方法1 @Override public void CallBack(Bean bean) { } @Override public void OnClickListeber(View view, int position, int type) { switch (type) { case 1: //先添加,后移除 Bean.ResultBean.NationsBean nationsBean = new Bean.ResultBean.NationsBean(); nationsBean.setName(one.get(position).getName()); two.add(nationsBean); myRecy2Adapter.setData(two); myRecy2Adapter.notifyDataSetChanged(); one.remove(position); myRecy1Adapter.setData(one); myRecy1Adapter.notifyDataSetChanged(); break; case 2: Bean.ResultBean.CategoryBean categoryBean = new Bean.ResultBean.CategoryBean(); categoryBean.setName(two.get(position).getName()); one.add(categoryBean); myRecy1Adapter.setData(one); myRecy1Adapter.notifyDataSetChanged(); two.remove(position); myRecy2Adapter.setData(two); myRecy2Adapter.notifyDataSetChanged(); break; } }} 2.application包 MyApplication类 public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); x.Ext.init(this); x.Ext.setDebug(BuildConfig.DEBUG); File cacheDirectory = StorageUtils.getOwnCacheDirectory(this, Environment.getExternalStorageDirectory().getPath()); ImageLoaderConfiguration imageLoaderConfiguration = new ImageLoaderConfiguration.Builder(this) .diskCacheFileCount(500) .diskCacheSize(100 * 1024 * 1024) .diskCacheFileNameGenerator(new Md5FileNameGenerator()) .diskCache(new UnlimitedDiskCache(cacheDirectory)) .memoryCache(new LruMemoryCache(2 * 1024 * 1024)) .threadPoolSize(3) .build(); ImageLoader.getInstance().init(imageLoaderConfiguration); }} 3.adapter包 ①MyCarouselAdapter类 ublic class MyCarouselAdapter extends PagerAdapter { private Context context; private ArrayList<Bean.ResultBean.BrandsBean> list = new ArrayList<>(); public MyCarouselAdapter(Context context) { this.context = context; } @Override public int getCount() { return Integer.MAX_VALUE; } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public void destroyItem(ViewGroup container, int position, Object object) { } /** * 53行错误算数异常。 * */ @Override public Object instantiateItem(ViewGroup container, int position) { ImageView imageView = new ImageView(context); imageView.setScaleType(ImageView.ScaleType.FIT_XY); DisplayImageOptions builder =new DisplayImageOptions.Builder() .showImageOnLoading(R.mipmap.ic_launcher) .showImageOnFail(R.mipmap.ic_launcher) .cacheOnDisk(true) .cacheInMemory(false) .build(); //youcuo ImageLoader.getInstance().displayImage(list.get(position % list.size()).getPic(),imageView,builder); container.addView(imageView); return imageView; } public void setData(List<Bean.ResultBean.BrandsBean> brands) { if (brands!=null){ this.list.addAll(brands); } }} ②MyAdapter类 public class MyAdapter extends FragmentPagerAdapter{ private Context context; private ArrayList<Fragment> list = new ArrayList<>(); public MyAdapter(FragmentManager fm, ArrayList<Fragment> list) { super(fm); this.list = list; } public MyAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { return list.get(position); } @Override public int getCount() { return list != null ? list.size() : 0; }} ③MyRecy1Adapter类public class MyRecy1Adapter extends RecyclerView.Adapter<MyRecy1Adapter.MyViewHoder> { private Context context; private ArrayList<Bean.ResultBean.CategoryBean> list = new ArrayList<>(); private boolean isshow = false; private More more; public MyRecy1Adapter(Context context) { this.context = context; } @Override public MyViewHoder onCreateViewHolder(ViewGroup parent, int viewType) { View inflate = View.inflate(context, R.layout.channel_item, null); MyViewHoder myViewHoder = new MyViewHoder(inflate); return myViewHoder; } @Override public void onBindViewHolder(final MyViewHoder holder, final int position) {// if (isshow){//// if (position == 0 || position == 1) {//// holder.tv.setVisibility(View.GONE);//// } else {//// holder.tv.setVisibility(View.VISIBLE);//// }//// }else {// holder.tv.setVisibility(View.GONE);// } holder.tv.setText(list.get(position).getName()); holder.tv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (more!=null){ more.OnClickListeber(holder.tv,position,1); } } }); } @Override public int getItemCount() { return list != null ? list.size() : 0; } public void setOnclickListener(More more) { this.more = more; } public void setData(ArrayList<Bean.ResultBean.CategoryBean> myarr) { list.clear(); if (myarr != null) { list.addAll(myarr); } } /** * MyViewHoder */ class MyViewHoder extends RecyclerView.ViewHolder { private final TextView tv; public MyViewHoder(View itemView) { super(itemView); tv = (TextView) itemView.findViewById(R.id.tv); } }} ④MyGridAdapter类 public class MyGridAdapter extends BaseAdapter { private Context context; private ArrayList<Bean.ResultBean.IndexProductsBean> list = new ArrayList<>(); private ViewHoder viewHoder; public MyGridAdapter(Context context) { this.context = context; } @Override public int getCount() { return list != null ? list.size() :0 ; } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null){ convertView = View.inflate(context,R.layout.griditem,null); viewHoder = new ViewHoder(); viewHoder.imageView = (ImageView) convertView.findViewById(R.id.image_gf1); viewHoder.textView = (TextView) convertView.findViewById(R.id.text_gf1); convertView.setTag(viewHoder); }else { viewHoder = (ViewHoder) convertView.getTag(); } Utils.setImage(list.get((position % list.size())).getPic(), viewHoder.imageView); viewHoder.textView.setText(list.get(position).getName()); return convertView; } public void setData(List<Bean.ResultBean.IndexProductsBean> indexProducts) { if (indexProducts!=null){ this.list.clear(); this.list.addAll(indexProducts); } } class ViewHoder{ ImageView imageView; TextView textView; }} ⑤MyRecy2Adapter 类 public class MyRecy2Adapter extends RecyclerView.Adapter<MyRecy2Adapter.MyViewHoder> { private Context context; private ArrayList<Bean.ResultBean.NationsBean> list = new ArrayList<>(); private boolean isshow = false; private MainActivity mainActivity; private More more; public MyRecy2Adapter(Context context) { this.context = context; } @Override public MyViewHoder onCreateViewHolder(ViewGroup parent, int viewType) { View inflate = View.inflate(context, R.layout.channel_item, null); MyViewHoder myViewHoder = new MyViewHoder(inflate); return myViewHoder; } @Override public void onBindViewHolder(final MyViewHoder holder, final int position) {// if (isshow){//// if (position == 0 || position == 1) {//// holder.tv.setVisibility(View.GONE);//// } else {//// holder.tv.setVisibility(View.VISIBLE);//// }//// }else {// holder.tv.setVisibility(View.GONE);// } holder.tv.setText(list.get(position).getName()); holder.tv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (more!=null){ more.OnClickListeber(holder.tv,position,2); } } }); } @Override public int getItemCount() { return list != null ? list.size() : 0 ; } public void setOnclickListener(MainActivity mainActivity) { this.mainActivity = mainActivity; } public void setData(ArrayList<Bean.ResultBean.NationsBean> myarr) { list.clear(); if (myarr != null) { list.addAll(myarr); } } public void setOnclickListener(More more) { this.more = more; } class MyViewHoder extends RecyclerView.ViewHolder{ private final TextView tv; public MyViewHoder(View itemView) { super(itemView); tv = (TextView) itemView.findViewById(R.id.tv); } }} 4.iview包,,,接口 ①IMVPView类 public interface IMVPView {} ②MainIView类public interface MainIView extends IMVPView{ void CallBack(Bean bean);} ③MyOnclicklistener类public interface MyOnclicklistener { void OnClickListeber(View view,int position, int type);} 最后的 adapter包①Fragment_one类②Fragment_two类(只在这里面写数据了)public class MyFragement_two extends Fragment implements MainIView { private ViewPager viewpager_f1; private LinearLayout lin; private ArrayList<View> dotList = new ArrayList<>(); private int oldPosition = 0; private GridView grid_view; private TextView jing; private TextView duo; private MyGridAdapter myGridAdapter; private F1Presenter f1Presenter; private List<Bean.ResultBean.IndexProductsBean> indexProducts; private static int index = 0; private boolean istrue = true; private MyHandler myHandler; private List<Bean.ResultBean.BrandsBean> brands; private List<Bean.ResultBean.CategoryBean> category; private List<Bean.ResultBean.NationsBean> nations; private MyGridAdapter myGridAdapter1; private MyCarouselAdapter myCarouselAdapter1; private ArrayList<View> views; private int upIndex = 0; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment2, container, false); } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); initView(); iniData(); } //视图 private void initView() { viewpager_f1 = (ViewPager) getView().findViewById(R.id.viewpager_f1); lin = (LinearLayout) getView().findViewById(R.id.lin); jing = (TextView) getView().findViewById(R.id.jing); duo = (TextView) getView().findViewById(R.id.duo); grid_view = (GridView) getView().findViewById(R.id.grid_view); myGridAdapter = new MyGridAdapter(getActivity()); grid_view.setAdapter(myGridAdapter); //点击更多跳转到频道页面 duo.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (category.size()>0 && nations.size()>0){ Intent intent = new Intent(getActivity(), More.class); //传值 因为bean实现序列化 所以可以意图传值 intent.putExtra("one", (Serializable) category); intent.putExtra("two", (Serializable) nations); startActivity(intent); } } }); //监听 viewpager_f1.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { views.get((upIndex % views.size())).setBackgroundResource(R.drawable.dot_false); views.get((position % views.size())).setBackgroundResource(R.drawable.dot_true); upIndex = position; } @Override public void onPageScrollStateChanged(int state) { } }); } //加载数据 private void iniData() { f1Presenter = new F1Presenter(); f1Presenter.setTbase(this); f1Presenter.getData(); } //此方法可以让viewpager活起来 private void initPricture() { myHandler = new MyHandler((MainActivity) getActivity()); new Thread() { @Override public void run() { while (istrue) { try { sleep(2000); myHandler.sendEmptyMessage(0); } catch (InterruptedException e) { e.printStackTrace(); } } } }.start(); } //回掉方法 @Override public void CallBack(Bean dataBean) { category = dataBean.getResult().getCategory(); nations = dataBean.getResult().getNations(); //轮播图数据 brands = dataBean.getResult().getBrands(); //gridview数据 indexProducts = dataBean.getResult().getIndexProducts(); //设置gridview myGridAdapter1 = new MyGridAdapter(getActivity()); myGridAdapter1.setData(indexProducts); grid_view.setAdapter(myGridAdapter1); //设置轮播图 myCarouselAdapter1 = new MyCarouselAdapter(getActivity()); myCarouselAdapter1.setData(brands); viewpager_f1.setAdapter(myCarouselAdapter1); if (brands != null) { views = new ArrayList<>(); for (int i = 0; i < brands.size(); i++) { View view = new View(getActivity()); LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(30, 30); view.setLayoutParams(layoutParams); views.add(view); if (i == 0) { view.setBackgroundResource(R.drawable.dot_true); } else { view.setBackgroundResource(R.drawable.dot_false); } lin.addView(views.get(i)); } } initPricture(); } @Override public void onPause() { super.onPause(); istrue = false; initPricture(); } @Override public void onResume() { super.onResume(); istrue = true; initPricture(); } //轮播图的 Handler private class MyHandler extends Handler { private final WeakReference<MainActivity> reference; public MyHandler(MainActivity mainActivity) { reference = new WeakReference<>(mainActivity); } @Override public void handleMessage(Message msg) { super.handleMessage(msg); if (reference.get() != null) { switch (msg.what) { case 0: { if (viewpager_f1 != null) { viewpager_f1.setCurrentItem(index, false); } index++; } break; } } } }}Fragment_three类Fragment_four类
阅读全文
2 0
- 小Demo--狸菇凉_
- 小demo
- 小demo
- 小demo
- css小案例 小demo
- JS 小DEMO
- 反射机制小Demo
- java socket小demo
- pipe demo小程序
- ajax小的DEMO
- 多线程两个小demo
- WebView小Demo
- java画板小demo
- Socket小Demo
- NSAttributedString 小demo
- md5加密小demo
- ofbiz小Demo实例
- CGContext 小Demo
- Kafka更新offset,scala反射调用进行测试
- 【算法题】买苹果
- 104-信号引起的竞争错误
- Jedis中hset散列相关操作
- 时间复杂度的计算
- 小Demo--狸菇凉_
- 游戏开发需要懂几种语言?
- 人工智能的可行性分析
- Android校招面试题 —— Android篇
- Android ViewHolder的作用与用法
- LeetCode 231. Power of Two (算法,计算二进制数中1的位数)
- 使用sklearn优雅地进行数据挖掘
- ubuntu安装vue
- Linux修改文件夹及文件权限