0,Fragment切换
(1)MainActivity
public class MainActivity extends AppCompatActivity { private ViewPager viewPager; private RadioGroup radioGroup; private List<Fragment> list=new ArrayList<>(); private MyFragmentAdapter myFragmentAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); viewPager = findViewById(R.id.main_viewpager); radioGroup = findViewById(R.id.main_radiogroup); list.add(new Fragment_Type()); list.add(new Fragment_ShopCart()); //创建fragment 适配器 myFragmentAdapter = new MyFragmentAdapter(getSupportFragmentManager(),list); viewPager.setAdapter(myFragmentAdapter); //给radiogroup点击事件 radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { switch (checkedId){ case R.id.but_1: viewPager.setCurrentItem(0); break; case R.id.but_2: viewPager.setCurrentItem(1); break; } } }); //给viewpager点击事件 viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { switch (position){ case 0: radioGroup.check(R.id.but_1); break; case 1: radioGroup.check(R.id.but_2); break; } } @Override public void onPageScrollStateChanged(int state) { } }); } }
(2)pageAdapter
public class MyFragmentAdapter extends FragmentPagerAdapter{ private List<Fragment> list; public MyFragmentAdapter(FragmentManager fm, List<Fragment> list) { super(fm); this.list = list; } @Override public Fragment getItem(int position) { return list.get(position); } @Override public int getCount() { return list.size(); } }
一,App
public class MyApp extends Application { @Override public void onCreate() { super.onCreate(); Fresco.initialize(this); } }
二,Base
(1)BasePresenter
public abstract class BasePresenter<V extends IView> { protected CompositeDisposable compositeDisposable=new CompositeDisposable(); protected V view; public BasePresenter(V view) { this.view = view; initModel(); } protected abstract void initModel(); //解决内存泄漏 void onDestory(){ view=null; compositeDisposable.clear(); } }
(2)BaseActivity
public abstract class BaseActivity <P extends BasePresenter> extends Fragment{ protected P presenter; @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(setView(), null); initview(view); initListener(); return view; } protected abstract void initListener(); protected abstract void initview(View view); protected abstract int setView(); protected abstract void initData(); protected abstract P presenterById(); @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); if(presenter==null){ presenter=presenterById(); initData(); return; } } @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if(isVisibleToUser){ if(presenter==null){ return; } initData(); } } //内存泄漏 @Override public void onDestroy() { presenter.onDestory(); super.onDestroy(); } }
三,RetrofitManager
public class RetrofitManager { //1.设置公共的url private static String BASE_URL= ConstantApi.BASE_URL; private Retrofit retrofit; //2.默认持有者 private static class SingleHolder{ private static final RetrofitManager INSENCE=new RetrofitManager(BASE_URL); } public RetrofitManager(String baseUrl) { retrofit=new Retrofit.Builder() .baseUrl(baseUrl) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .client(buildOkHttpClient()) .build(); } private OkHttpClient buildOkHttpClient() { return new OkHttpClient.Builder() .connectTimeout(5000, TimeUnit.MILLISECONDS) .readTimeout(5000,TimeUnit.MILLISECONDS) .writeTimeout(5000,TimeUnit.MILLISECONDS) .build(); } //设置公共方法 public static RetrofitManager getDefault(){ return SingleHolder.INSENCE; } public<T> T creat(Class<T> clazz){ return retrofit.create(clazz); } }
四:ConfitApi
public class ConstantApi { public static final String BASE_URL = "https://www.zhaoapi.cn/"; //购物车 public static final String SHOPCART_URL ="product/getCarts"; //删除购物车 public static final String DELETE_URL="product/deleteCart"; //分类左边List展示 public static final String TYPE_URL="product/getCatagory"; //分类 右边 public static final String right_URL ="product/getProductCatagory"; }
五,购物车/分类api
//查询购物车 @GET(ConstantApi.SHOPCART_URL) Observable<ShopCartBean> shopcart(@Query("uid") int uid); //删除购物车 @GET(ConstantApi.DELETE_URL) Observable<DeleteBean> deleter(@Query("uid") String uid,@Query("pid") String pid);
//分类 左边listview @GET(ConstantApi.TYPE_URL) Observable<TypeLeftBean> typeleftlistview(); //右边 @GET(ConstantApi.right_URL) Observable<TypeRightBean> typeRightview(@Query("cid") int cid);
六,TypeModel
public class TypeModel { //左边listview public Observable<TypeLeftBean> typeleftview(){ return RetrofitManager.getDefault().creat(TypeApi.class).typeleftlistview(); } //右边view public Observable<TypeRightBean> typerightview(int cid){ return RetrofitManager.getDefault().creat(TypeApi.class).typeRightview(cid); } }
七,TypePresenter
public class TypePresenter extends BasePresenter<TypeView>{ private TypeModel typeModel; public TypePresenter(TypeView view) { super(view); } //左边list public void typeLeft(){ typeModel.typeleftview() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<TypeLeftBean>() { @Override public void onSubscribe(Disposable d) { compositeDisposable.clear(); } @Override public void onNext(TypeLeftBean typeLeftBean) { if(view!=null){ view.getSuccessLeft(typeLeftBean); } } @Override public void onError(Throwable e) { if(view!=null){ view.getErrorLeft(e.toString()); } } @Override public void onComplete() { } }); } //右边view public void typeRight(int cid){ typeModel.typerightview(cid) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<TypeRightBean>() { @Override public void onSubscribe(Disposable d) { compositeDisposable.clear(); } @Override public void onNext(TypeRightBean typeRightBean) { if(view!=null){ view.getSuccessRight(typeRightBean); } } @Override public void onError(Throwable e) { if(view!=null){ view.getErrorRight(e.toString()); } } @Override public void onComplete() { } }); } @Override protected void initModel() { typeModel = new TypeModel(); } }
八,TypeFragment
public class Fragment_Type extends BaseActivity<TypePresenter> implements TypeView { private static final String TAG = "Fragment_Type===="; private int cid=1; private ListView listView; private RecyclerView recyclerView; private MyLeftAdapter myLeftAdapter; private MyRightAdapter1 myRightAdapter1; @Override protected void initListener() { } @Override protected void initview(View view) { listView = view.findViewById(R.id.main_typelistview); recyclerView = view.findViewById(R.id.main_type_recyleview); } @Override protected int setView() { return R.layout.type_frgament; } @Override protected void initData() { presenter.typeLeft(); presenter.typeRight(cid); } @Override protected TypePresenter presenterById() { return new TypePresenter(this); } //左边listview @Override public void getSuccessLeft(TypeLeftBean json) { Log.d(TAG, "左边listview成功: "+json); final List<TypeLeftBean.DataBean> data = json.getData(); //创建适配器 myLeftAdapter = new MyLeftAdapter(data,getContext()); listView.setAdapter(myLeftAdapter); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { int cid = data.get(position).getCid(); presenter.typeRight(cid); } }); } @Override public void getErrorLeft(String e) { } //右边view @Override public void getSuccessRight(TypeRightBean json) { List<TypeRightBean.DataBean> rightdata = json.getData(); //创建适配器 myRightAdapter1 = new MyRightAdapter1(getContext(),rightdata); LinearLayoutManager linearLayoutManager=new LinearLayoutManager(getContext()); recyclerView.setLayoutManager(linearLayoutManager); recyclerView.setAdapter(myRightAdapter1); } @Override public void getErrorRight(String e) { } }
九,适配器
(1)ListViewAdapter
public class MyLeftAdapter extends BaseAdapter { private List<TypeLeftBean.DataBean> list; private Context context; public MyLeftAdapter(List<TypeLeftBean.DataBean> list, Context context) { this.list = list; this.context = context; } @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 View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; if(convertView==null){ viewHolder=new ViewHolder(); convertView=View.inflate(context,R.layout.type_left_adapter,null); viewHolder.textView=convertView.findViewById(R.id.adapter_left_tv); convertView.setTag(viewHolder); }else{ viewHolder= (ViewHolder) convertView.getTag(); } //赋值 viewHolder.textView.setText(list.get(position).getName()); return convertView; } class ViewHolder{ TextView textView; } }
(2)MyRight1Adapter
public class MyRightAdapter1 extends RecyclerView.Adapter<MyRightAdapter1.MyViewHolder> { private Context context; private List<TypeRightBean.DataBean> list; public MyRightAdapter1(Context context, List<TypeRightBean.DataBean> list) { this.context = context; this.list = list; } @NonNull @Override public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(context).inflate(R.layout.type_right1_adapter, parent, false); MyViewHolder myViewHolder=new MyViewHolder(view); return myViewHolder; } @Override public void onBindViewHolder(@NonNull MyViewHolder holder, int position) { holder.textView.setText(list.get(position).getName()); List<TypeRightBean.DataBean.ListBean> rightdata2 = this.list.get(position).getList(); //创建适配器 MyRightAdapter2 myRightAdapter2=new MyRightAdapter2(rightdata2,context); GridLayoutManager gridLayoutManager=new GridLayoutManager(context,3); holder.recyclerView.setLayoutManager(gridLayoutManager); holder.recyclerView.setAdapter(myRightAdapter2); } @Override public int getItemCount() { return list==null? 0:list.size(); } public class MyViewHolder extends RecyclerView.ViewHolder { private TextView textView; private RecyclerView recyclerView; public MyViewHolder(View itemView) { super(itemView); textView=itemView.findViewById(R.id.type_right1_adapter_tv); recyclerView=itemView.findViewById(R.id.type_adapter_right1_recyleview); } } }
(3)MyRight2Adapter
public class MyRightAdapter2 extends RecyclerView.Adapter<MyRightAdapter2.MyViewHolder>{ private List<TypeRightBean.DataBean.ListBean> list; private Context context; public MyRightAdapter2(List<TypeRightBean.DataBean.ListBean> list, Context context) { this.list = list; this.context = context; } @NonNull @Override public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(context).inflate(R.layout.type_right2_adapter, parent, false); MyViewHolder myViewHolder=new MyViewHolder(view); return myViewHolder; } @Override public void onBindViewHolder(@NonNull MyViewHolder holder, int position) { holder.textView.setText(list.get(position).getName()); String icon = list.get(position).getIcon(); holder.simpleDraweeView.setImageURI(Uri.parse(icon)); } @Override public int getItemCount() { return list==null ? 0:list.size(); } public class MyViewHolder extends RecyclerView.ViewHolder { private SimpleDraweeView simpleDraweeView; private TextView textView; public MyViewHolder(View itemView) { super(itemView); simpleDraweeView=itemView.findViewById(R.id.type_right2_adapter_simageview); textView=itemView.findViewById(R.id.type_right2_adapter_tv); } } }
----------------------------------------------------------------------------------------------------------------------------------------------------------------
一,购物车 MyAddView
public class MyAddSubView extends LinearLayout implements View.OnClickListener { //定义加减器 private int number=1; private TextView tv_remove,tv_number,tv_add; private View view; public MyAddSubView(Context context) { super(context,null); } public MyAddSubView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); //1.加载addview布局 view = inflate(context, R.layout.shopcart_addsubview, this); //获取资源id tv_remove = view.findViewById(R.id.tv_remove); tv_number=view.findViewById(R.id.tv_number); tv_add=view.findViewById(R.id.tv_add); tv_remove.setOnClickListener(this); tv_add.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()){ case R.id.tv_remove: if(number>1){ --number; //把结果回调出去 tv_number.setText(number+""); if(onNumberChangeListener!=null){ onNumberChangeListener.getonNumberChange(number); } } break; case R.id.tv_add: ++number; tv_number.setText(number+""); if(onNumberChangeListener!=null){ onNumberChangeListener.getonNumberChange(number); } break; } } //当展示购物车的时候,展示几件商品,展示出来 public int getNumber() { return number; } public void setNumber(int number) { this.number = number; tv_number.setText(number+""); } onNumberChangeListener onNumberChangeListener; public void setOnNumberChangeListener(MyAddSubView.onNumberChangeListener onNumberChangeListener) { this.onNumberChangeListener = onNumberChangeListener; } //定义回调接口 public interface onNumberChangeListener{ void getonNumberChange(int num); } }
二,ShopModel
public class ShopCartModel { //查询购物车 public Observable<ShopCartBean> shopcart(int uid){ return RetrofitManager.getDefault().creat(ShopCartApi.class).shopcart(uid); } //删除购物车 public Observable<DeleteBean> deleter(String uid,String pid){ return RetrofitManager.getDefault().creat(ShopCartApi.class).deleter(uid,pid); } }
三,ShopPresenter
public class ShopCartPresenter extends BasePresenter<ShopCartView> { priva