仿京东分类

加依赖

//加载  图片用的包
    implementation 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
//Gson
    implementation 'com.google.code.gson:gson:2.6.2'

    // OkHttp
    implementation 'com.squareup.okhttp3:okhttp:3.9.0'
//拦截器
    implementation 'com.squareup.okhttp3:logging-interceptor:3.9.0'//

    //xRecyclerView的依赖
    compile 'com.jcodecraeer:xrecyclerview:1.5.9'
    //recyclerView的依赖
    compile 'com.android.support:recyclerview-v7:26+'

    //省去findViewbyid
    implementation 'com.jakewharton:butterknife:8.8.1'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'

添加权限

<uses-permission android:name="android.permission.INTERNET"></uses-permission>
 
android:name=".app.MyApp"
写baseFragment
public abstract class BaseFragment <P extends BaseFragmentPresenter> extends Fragment {


    protected P presenter;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        View view = inflater.inflate(privideLayoutId(),container,false);
        presenter=providePresenter();
        initViews(view);
        initListener();
        return view;
    }

    protected abstract void initViews(View view);


    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
//提供presenter
        if (presenter==null){
            presenter=providePresenter();
            initData();
        }
    }

    //懒加载模式
    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if(isVisibleToUser){
            if (presenter==null){
                return;
            }
            initData();
        }else{
            noVisible();
        }
    }

    protected  void noVisible(){};

    protected abstract void initData();

    protected abstract void initListener();

    protected abstract P providePresenter();
    protected abstract int privideLayoutId();

    //解决内存泄漏

    @Override
    public void onDestroy() {
        super.onDestroy();
        presenter.onDestroy();
    }
}
 
IView

public interface IView {
    Context context();
}

BaseFragmentPresenter



public abstract class BaseFragmentPresenter<V extends IView>{
    protected  V view;

    public BaseFragmentPresenter(V view) {
        this.view = view;
        initmodel();
    }

    protected abstract void initmodel();
    void onDestroy(){
        view=null;
    }
//    protected Context getContext(){
//             if(view!=null && view.context()!=null){
//                 return view.context();
//             }else{
//                     return MyApp.getAppContext();
//             }
//    }
}

然后写布局

主布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"

    android:orientation="vertical"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:orientation="horizontal"
        android:layout_height="40dp">
        <Button
            android:id="@+id/btn_xin"
            android:background="@drawable/sao_hei"
            android:layout_width="35dp"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:layout_gravity="center_vertical"
            android:layout_height="35dp" />
         <EditText
             android:id="@+id/shuru"
             android:layout_width="wrap_content"
             android:layout_height="48dp"
             android:layout_centerVertical="true"
             android:focusable="false"
             android:layout_weight="1"

             android:text="七夕京东购物狂欢节"
             />

        <Button
            android:id="@+id/btn_sao"
            android:background="@drawable/msg_hei"
            android:layout_width="35dp"
            android:layout_height="35dp" />
             </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:orientation="horizontal"
        android:layout_height="match_parent">
        <ListView
            android:id="@+id/lv_class"
            android:layout_width="120dp"
            android:layout_height="match_parent"></ListView>
            <LinearLayout
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:orientation="vertical"
                android:layout_weight="1"
                >

                <ImageView
                    android:layout_width="match_parent"
                    android:layout_height="108dp"
                    android:background="@drawable/timg"
                    />
             <FrameLayout
                 android:id="@+id/fm_right_fragment"
                 android:layout_width="match_parent"
                 android:layout_height="0dp"
                 android:layout_weight="1"
                 ></FrameLayout>
            </LinearLayout>
    </LinearLayout>
</LinearLayout>
 

子布局    

grid_view_item

<?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:gravity="center"
    android:background="#fff"
    android:layout_margin="5dp"
    android:orientation="vertical">

    <ImageView
        android:id="@+id/img_grid_view_classify"
        android:layout_width="75dp"
        android:layout_height="75dp"
        android:layout_margin="10dp"
        android:src="@mipmap/ic_launcher" />

    <TextView
        android:id="@+id/tv_grid_item_classify"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:text="标题"
        android:gravity="center"
        android:textColor="#000"
        android:ellipsize="end"
        android:maxLines="3"
        />
</LinearLayout>

group_view_alyuot

<?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">
     <TextView
         android:id="@+id/tv_name_group_class"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:textSize="24dp"
         android:gravity="center"
          android:textColor="#000"
         android:layout_marginTop="10dp"
         />
</LinearLayout>

fragment_class_right

<?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">
   <ExpandableListView
       android:id="@+id/elv_right_class"
       android:layout_width="match_parent"
       android:layout_height="match_parent"></ExpandableListView>
</LinearLayout>

class_list_view_item

<?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">
       <TextView
           android:id="@+id/tv_catagory_class"
           android:layout_width="match_parent"
           android:text="标题"
           android:textSize="20dp"
           android:padding="10dp"
           android:gravity="center"
           android:layout_height="wrap_content" />
</LinearLayout>

classmodel

public class ClassModel {
        public void getleftListData(final IClassifyModelCallback iClassifyModelCallback){
            OkHttpUtils okHttpUtils = OkHttpUtils.getoKhttpUtils();
            okHttpUtils.doGet(HttpConfig.CATAGORY_URL, new OkHttpUtils.IOKhttpUtilsCallback() {
                @Override
                public void onFailure(String error) {
                          if(iClassifyModelCallback!=null){
                                 iClassifyModelCallback.getLeftListFaild(error);
                          }
                }

                @Override
                public void onResponse(String json) {
                    CatagoryBean catagoryBean = new Gson().fromJson(json, CatagoryBean.class);
                    String code = catagoryBean.getCode();
                    String msg = catagoryBean.getMsg();
                    if("0".equals(code)){
                          if(iClassifyModelCallback!=null){
                                 iClassifyModelCallback.getLeftListSuccess(catagoryBean);
                          }
                    }else{
                           if(iClassifyModelCallback!=null){
                               iClassifyModelCallback.getLeftListFaild(msg);
                           }
                    }
                }
            });
        }

    public interface IClassifyModelCallback{
        void getLeftListSuccess(CatagoryBean catagoryBean);
        void getLeftListFaild(String error);
    }
//获取右边子分类的数据
     public void getRightListData(Integer cid, final IClassifyModelCallback2 iClassifyModelCallback2){
         OkHttpUtils okHttpUtils = OkHttpUtils.getoKhttpUtils();
         okHttpUtils.doGet(HttpConfig.PRODUCTCATAGORY_URL + "?cid=" + cid, new OkHttpUtils.IOKhttpUtilsCallback() {
             @Override
             public void onFailure(String error) {
                  if(iClassifyModelCallback2!=null){
                         iClassifyModelCallback2.getRightListFaild(error);
                  }
             }

             @Override
             public void onResponse(String json) {
                 ProductCatagoryBean productCatagoryBean = new Gson().fromJson(json, ProductCatagoryBean.class);
                 String code = productCatagoryBean.getCode();
                 String msg = productCatagoryBean.getMsg();
                 if("0".equals(code)){
                     if(iClassifyModelCallback2!=null){
                         iClassifyModelCallback2.getRightListSuccess(productCatagoryBean);
                     }
                 }else{
                     if(iClassifyModelCallback2!=null){
                         iClassifyModelCallback2.getRightListFaild(msg);
                     }
                 }
             }
         });
     }
        public interface IClassifyModelCallback2{
            void getRightListSuccess(ProductCatagoryBean productCatagoryBean);
            void getRightListFaild(String error);
        }
}
ClassPresenter


public class ClassPresenter extends BaseFragmentPresenter<ClassView> {

    private ClassModel classModel;

    public ClassPresenter(ClassView view) {
        super(view);
    }


    @Override
    protected void initmodel() {
                  classModel=new ClassModel();
    }

    public void getLeftListData(){
           classModel.getleftListData(new ClassModel.IClassifyModelCallback() {
               @Override
               public void getLeftListSuccess(CatagoryBean catagoryBean) {
                   if(view!=null){
                          view.getLeftListSuccess(catagoryBean);
                   }
               }

               @Override
               public void getLeftListFaild(String error) {
                   if(view!=null){
                      view.getLeftListFaild(error);
                   }
               }
           });
    }

    public void getRightListData(int cid){
            classModel.getRightListData(cid, new ClassModel.IClassifyModelCallback2() {
                @Override
                public void getRightListSuccess(ProductCatagoryBean productCatagoryBean) {
                        if(view!=null){
                              view.getRightListSuccess(productCatagoryBean);
                        }
                }

                @Override
                public void getRightListFaild(String error) {
                                  if(view!=null){
                                       view.getRightListFaild(error);
                                  }
                }
            });
    }
}

MyGridView

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

    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
    {
        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
                MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, expandSpec);

    }
}
 
ClassRightFragment

public class ClassRightFragment extends BaseFragment<ClassPresenter> implements ClassView {
        private List<String> groupName=new ArrayList<>();
        private List<List<String>> childNames=new ArrayList<>();
        private List<List<String>> childIcons=new ArrayList<>();
        private ExpandableListView expandableListView;
    @Override
    public Context context() {
        return getContext();
    }

    @Override
    public void getLeftListSuccess(CatagoryBean catagoryBean) {

    }

    @Override
    public void getLeftListFaild(String error) {

    }
    public void getData(int cid){
        Bundle args = new Bundle();
        args.putInt("cid", cid);
        setArguments(args);
    }
    @Override
    public void getRightListSuccess(ProductCatagoryBean productCatagoryBean) {
        List<ProductCatagoryBean.DataBean> data = productCatagoryBean.getData();
        for(int i=0;i<data.size();i++){
            String name = data.get(i).getName();
            groupName.add(name);
            List<ProductCatagoryBean.DataBean.ListBean> list = data.get(i).getList();
            ArrayList<String> list_names = new ArrayList<>();
            ArrayList<String> list_isons = new ArrayList<>();
            for(int j=0;j<list.size();j++){
                 list_names.add(list.get(j).getName());
                 list_isons.add(list.get(j).getIcon());
            }
            childNames.add(list_names);
            childIcons.add(list_isons);
        }
        MyBaseExpandableListAdapter myBaseExpandableListAdapter = new MyBaseExpandableListAdapter(getContext(), groupName, childNames, childIcons);
        expandableListView.setAdapter(myBaseExpandableListAdapter);
        //默认打开
        int count = expandableListView.getCount();
        for(int i=0;i<count;i++){
             expandableListView.expandGroup(i);
        }
    }

    @Override
    public void getRightListFaild(String error) {

    }


    @Override
    protected void initViews(View view) {
        Bundle arguments = getArguments();
        int cid = arguments.getInt("cid");

        presenter.getRightListData(cid);
        expandableListView = view.findViewById(R.id.elv_right_class);
    }

    @Override
    public void initData(){

    }
    @Override
    protected void initListener() {

    }

    @Override
    protected ClassPresenter providePresenter() {
        return new ClassPresenter(this);
    }

    @Override
    protected int privideLayoutId() {
        return R.layout.fragment_class_right;
    }

}

ClassView
public interface ClassView extends IView {
    void getLeftListSuccess(CatagoryBean catagoryBean);
    void getLeftListFaild(String error);
    void getRightListSuccess(ProductCatagoryBean productCatagoryBean);
    void getRightListFaild(String error);
}
MyGridViewAdapter

public class MyGridViewAdapter extends BaseAdapter {
    private Context context;
    private List<String> names;
    private List<String> icons;

    public MyGridViewAdapter(Context context, List<String> names, List<String> icons) {
        this.context = context;
        this.names = names;
        this.icons = icons;
    }

    @Override
    public int getCount() {
        return icons.size();
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if(convertView==null){
            convertView=   View.inflate(context, R.layout.grid_view_item,null);
            ImageView imageView = convertView.findViewById(R.id.img_grid_view_classify);
            TextView textView = convertView.findViewById(R.id.tv_grid_item_classify);
            holder = new ViewHolder(imageView,textView);
            convertView.setTag(holder);
        }
        else{
          holder= (ViewHolder) convertView.getTag();
        }
        //赋值
       holder.getTextView().setText(names.get(position));
        ImageLoader.getInstance().displayImage(icons.get(position),holder.getImageView(), MyApp.getOptions());
        return convertView;
    }
    class ViewHolder{
        private TextView textView;
        private ImageView imageView;

        public ViewHolder(ImageView imageView, TextView textView) {
            this.imageView = imageView;
            this.textView = textView;
        }

        public ImageView getImageView() {
            return imageView;
        }

        public void setImageView(ImageView imageView) {
            this.imageView = imageView;
        }

        public TextView getTextView() {
            return textView;
        }

        public void setTextView(TextView textView) {
            this.textView = textView;
        }
    }
}

MyBaseExpandableListAdapter


public class MyBaseExpandableListAdapter extends BaseExpandableListAdapter {
    private Context context;
    private List<String> groupNames;
    private List<List<String>> childNames;
    private List<List<String>> childIcons;


    public MyBaseExpandableListAdapter(Context context, List<String> groupNames, List<List<String>> childNames, List<List<String>> childIcons) {
        this.context = context;
        this.groupNames = groupNames;
        this.childNames = childNames;
        this.childIcons = childIcons;
    }


    @Override
    public int getGroupCount() {
        return groupNames.size();
    }


    @Override
    public int getChildrenCount(int groupPosition) {
        //加载 布局   只要一次
        return 1;
    }


    @Override
    public Object getGroup(int groupPosition) {
        return null;
    }


    @Override
    public Object getChild(int groupPosition, int childPosition) {
        return null;
    }


    @Override
    public long getGroupId(int groupPosition) {
        return 0;
    }


    @Override
    public long getChildId(int groupPosition, int childPosition) {
        return 0;
    }


    @Override
    public boolean hasStableIds() {
        return false;
    }


    @Override
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
         ViewHolder holder;
         if(convertView==null){
             convertView=View.inflate(context,R.layout.group_view_layout,null);
             TextView textView = convertView.findViewById(R.id.tv_name_group_class);
            holder= new ViewHolder(textView);
             convertView.setTag(holder);
         }else{
           holder= (ViewHolder) convertView.getTag();
         }
        holder.getTextView().setText(groupNames.get(groupPosition));
        return convertView;
    }


    @Override
    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
        MyGridView gridView = new MyGridView(context);
        MyGridViewAdapter adapter = new MyGridViewAdapter(context,childNames.get(groupPosition),childIcons.get(groupPosition));
        gridView.setAdapter(adapter);
        gridView.setNumColumns(3);// 设置每行列数
        gridView.setGravity(Gravity.CENTER);// 位置居中
        return gridView;
    }


    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        return true;
    }
    class ViewHolder{
        private TextView textView;


        public ViewHolder(TextView textView) {
            this.textView = textView;
        }


        public TextView getTextView() {
            return textView;
        }


        public void setTextView(TextView textView) {
            this.textView = textView;
        }
    }
}

MyLeftListAdapter

public class MyLeftListAdapter extends BaseAdapter{
    private List<CatagoryBean.DataBean> list;
    private Context context;

    public MyLeftListAdapter(List<CatagoryBean.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 holder;
           if(convertView==null){
               convertView= View.inflate(context,R.layout.class_list_view_item,null);
               holder= new ViewHolder();
               holder.textView=convertView.findViewById(R.id.tv_catagory_class);
               convertView.setTag(holder);
           }else{
               holder= (ViewHolder) convertView.getTag();
           }
              holder.textView.setText(list.get(position).getName());
        return convertView;
    }

    class ViewHolder{
        TextView textView;
    }
}
classFragment
public class ClassFragment  extends BaseFragment<ClassPresenter> implements ClassView{
    private ListView listView;
    private List<CatagoryBean.DataBean> list= new ArrayList<>();

    @Override
    public void getLeftListSuccess(CatagoryBean catagoryBean) {
        List<CatagoryBean.DataBean> data = catagoryBean.getData();
        list.addAll(data);
        //适配器
        MyLeftListAdapter myLeftListAdapter = new MyLeftListAdapter(list, getContext());
        listView.setAdapter(myLeftListAdapter);
    }

    @Override
    public void getLeftListFaild(String error) {

    }

    @Override
    public void getRightListSuccess(ProductCatagoryBean productCatagoryBean) {

    }

    @Override
    public void getRightListFaild(String error) {

    }

    @Override
    protected void initViews(View view) {
        listView=  view.findViewById(R.id.lv_class);
    }

    @Override
    protected void initData() {
         presenter.getLeftListData();
    }

    @Override
    protected void initListener() {
             listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

                 private ClassRightFragment classRightFragment;

                 @Override
                 public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                     classRightFragment = new ClassRightFragment();
                     FragmentTransaction beginTransaction = getChildFragmentManager().beginTransaction();
                       beginTransaction.replace(R.id.fm_right_fragment,classRightFragment);
                       //bundle
                     Bundle bundle = new Bundle();
                     bundle.putInt("cid",list.get(position).getCid());
                     classRightFragment.setArguments(bundle);
                     beginTransaction.commit();

                 }
             });
    }

    @Override
    protected ClassPresenter providePresenter() {
        return new ClassPresenter(this);
    }

    @Override
    protected int privideLayoutId() {
        return   R.layout.classs_activity;
    }


    @Override
    public Context context() {
        return null;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值