分类(仿京东) 展示列表+自定义View+扫描二维码+搜索商品+FragLayou布局

XML布局

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

    <FrameLayout
        android:id="@+id/frag"
        android:layout_weight="9"
        android:layout_width="match_parent"
        android:layout_height="0dp"></FrameLayout>
    <RadioGroup
        android:id="@+id/group"
        android:layout_weight="1"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:orientation="horizontal">
        <RadioButton
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:text="首页"
            android:id="@+id/but1"
            android:button="@null"
            android:gravity="center"
            android:layout_weight="1"/>
        <RadioButton
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/but2"
            android:button="@null"
            android:gravity="center"
            android:text="分类"
            android:layout_weight="1"/>
        <RadioButton
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/but3"
            android:button="@null"
            android:gravity="center"
            android:text="发现"
            android:layout_weight="1"/>
        <RadioButton
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/but4"
            android:button="@null"
            android:gravity="center"
            android:text="购物车"
            android:layout_weight="1"/>
        <RadioButton
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/but5"
            android:button="@null"
            android:gravity="center"
            android:text="我的"
            android:layout_weight="1"/>
    </RadioGroup>

</LinearLayout>

MainActivity



public class MainActivity extends AppCompatActivity {

    private FrameLayout frag;
    private RadioGroup group;
    private FragmentA fragmentA;
    private FragmentB fragmentB;
    private FragmentC fragmentC;
    private FragmentD fragmentD;
    private FragmentE fragmentE;
    private FragmentTransaction fragmentTransaction;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //个推
        // com.getui.demo.DemoPushService 为第三方自定义推送服务
        PushManager.getInstance().initialize(this.getApplicationContext(), DemoPushService.class);

        // com.getui.demo.DemoIntentService 为第三方自定义的推送服务事件接收类
        PushManager.getInstance().registerPushIntentService(this.getApplicationContext(), DemoIntentService.class);
        //找到控件
        frag = findViewById(R.id.frag);
        group = findViewById(R.id.group);
        fragmentA = new FragmentA();
        fragmentB = new FragmentB();
        fragmentC = new FragmentC();
        fragmentD = new FragmentD();
        fragmentE = new FragmentE();
        fragmentTransaction = getSupportFragmentManager().beginTransaction();
        fragmentTransaction.add(R.id.frag,fragmentA);
        fragmentTransaction.add(R.id.frag,fragmentB);
        fragmentTransaction.add(R.id.frag,fragmentC);
        fragmentTransaction.add(R.id.frag,fragmentD);
        fragmentTransaction.add(R.id.frag,fragmentE);
        fragmentTransaction.show(fragmentA).hide(fragmentB).hide(fragmentC).hide(fragmentD).hide(fragmentE).commit();

        group.check(group.getChildAt(0).getId());
        group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                FragmentTransaction fragmentTransaction1 = getSupportFragmentManager().beginTransaction();
                switch (checkedId){
                    case R.id.but1:
                        fragmentTransaction1.show(fragmentA).hide(fragmentB).hide(fragmentC).hide(fragmentD).hide(fragmentE);
                        break;
                    case R.id.but2:
                        fragmentTransaction1.show(fragmentB).hide(fragmentA).hide(fragmentC).hide(fragmentD).hide(fragmentE);
                        break;
                    case R.id.but3:
                        fragmentTransaction1.show(fragmentC).hide(fragmentB).hide(fragmentA).hide(fragmentD).hide(fragmentE);
                        break;
                    case R.id.but4:
                        fragmentTransaction1.show(fragmentD).hide(fragmentB).hide(fragmentA).hide(fragmentC).hide(fragmentE);
                        break;
                    case R.id.but5:
                        fragmentTransaction1.show(fragmentE).hide(fragmentB).hide(fragmentA).hide(fragmentD).hide(fragmentC);
                        break;
                }
                fragmentTransaction1.commit();
            }
        });
    }
}

model



public class ClaModel implements IClaContance.IClaModel {

    private String key,value;
    @Override
    public void clalist(HashMap<String, String> params, final IClaModelCallBack callBack) {
        OkHttpUtils.getInstance().doGet(Api.Left, new OkHttpCallBack() {
            @Override
            public void success(String result) {
                callBack.success(result);
            }

            @Override
            public void error(String msg) {
                callBack.error(msg);
            }
        });
    }

    @Override
    public void claRightlist(HashMap<String, String> params, final IClaModelCallBack callBack) {
        for (Map.Entry<String,String>map:params.entrySet()){
            key=map.getKey();
            value=map.getValue();
        }
        String s = Api.right + value;
        OkHttpUtils.getInstance().doGet(s, new OkHttpCallBack() {
            @Override
            public void success(String result) {
                callBack.success(result);
            }

            @Override
            public void error(String msg) {
                callBack.error(msg);
            }
        });
    }

    public interface IClaModelCallBack{
        void success(String result);
        void error(String msg);
    }
}

接口Contance



public interface IClaContance {
    abstract class IClaPresenter{
        public abstract void clalist(HashMap<String,String>params);
        public abstract void claRightlist(HashMap<String,String>params);
    }
    interface IClaModel{
        void clalist(HashMap<String,String>params, ClaModel.IClaModelCallBack callBack);
        void claRightlist(HashMap<String,String>params, ClaModel.IClaModelCallBack callBack);
    }
    interface IClaView{
        void success(String result);
        void error(String msg);
        void Rightsuccess(String result);
        void Righterror(String msg);
    }
}

presenter



public class ClaPresenter extends IClaContance.IClaPresenter {

    private IClaContance.IClaView iClaView;
    private ClaModel claModel;

    public ClaPresenter(IClaContance.IClaView iClaView) {
        this.iClaView = iClaView;
        claModel = new ClaModel();
    }

    @Override
    public void clalist(HashMap<String, String> params) {
        claModel.clalist(params, new ClaModel.IClaModelCallBack() {
            @Override
            public void success(String result) {
                iClaView.success(result);
            }

            @Override
            public void error(String msg) {
                iClaView.error(msg);
            }
        });
    }

    @Override
    public void claRightlist(HashMap<String, String> params) {
        claModel.claRightlist(params, new ClaModel.IClaModelCallBack() {
            @Override
            public void success(String result) {
                iClaView.Rightsuccess(result);
            }

            @Override
            public void error(String msg) {
                iClaView.Righterror(msg);
            }
        });
    }
}

OkHttpCallBack



public interface OkHttpCallBack {
    void success(String result);
    void error(String msg);
}

OkHttpUtils



public class OkHttpUtils {
    private OkHttpClient okHttpClient;
    private static OkHttpUtils mInstance;
    private Handler handler = new Handler();

    //单例模式
    public static OkHttpUtils getInstance(){
        if (mInstance==null){
            synchronized (OkHttpUtils.class){
                if (mInstance==null){
                    mInstance = new OkHttpUtils();
                }
            }
        }
        return mInstance;
    }
    //拦截器
    private OkHttpUtils(){
        HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
        loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
        okHttpClient = new OkHttpClient.Builder()
                .addInterceptor(loggingInterceptor)
                .connectTimeout(5,TimeUnit.SECONDS)
                .readTimeout(5,TimeUnit.SECONDS)
                .writeTimeout(5,TimeUnit.SECONDS)
                .build();

    }
    //doGet
    public void doGet(String url,final OkHttpCallBack callBack){
        Request build = new Request.Builder().url(url).get().build();
        okHttpClient.newCall(build).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        callBack.error("网络异常");
                    }
                });
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if (response.code()==200){
                    final String string = response.body().string();
                    handler.post(new Runnable() {
                        @Override
                        public void run() {
                            callBack.success(string);
                        }
                    });
                }
            }
        });
    }
}

Api



public class Api {
    public static String Left = "http://172.17.8.100/small/commodity/v1/findFirstCategory";
    public static String right= "http://172.17.8.100/small/commodity/v1/findCommodityByKeyword?page=1&count=10&keyword=";
}

leftadapter



public class MyAdapter extends RecyclerView.Adapter<MyAdapter.Myvh> {
    private Context context;
    private List<UserBean.ResultBean>list;

    public MyAdapter(Context context) {
        this.context = context;
        list = new ArrayList<>();
    }

    public void setList(List<UserBean.ResultBean> list) {
        this.list = list;
        notifyDataSetChanged();
    }

    @NonNull
    @Override
    public Myvh onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.left,parent,false);
        return new Myvh(view);
    }

    @Override
    public void onBindViewHolder(@NonNull Myvh holder, final int position) {
        holder.title.setText(list.get(position).name);
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (onclicklisener!=null){
                    onclicklisener.click(list.get(position).name.substring(0,2));
                }
            }
        });
    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    public class Myvh extends RecyclerView.ViewHolder {

        private final TextView title;

        public Myvh(View itemView) {
            super(itemView);
            title = itemView.findViewById(R.id.title);
        }
    }
    private onclicklisener onclicklisener;

    public void setOnclicklisener(MyAdapter.onclicklisener onclicklisener) {
        this.onclicklisener = onclicklisener;
    }

    public interface onclicklisener{
        void click(String cid);
    }
}

rightadapter



public class RightAdapter extends RecyclerView.Adapter<RightAdapter.Myvh> {

    private Context context;
    private List<RightBean.Bean>list;

    public RightAdapter(Context context) {
        this.context = context;
        list = new ArrayList<>();
    }

    public void setList(List<RightBean.Bean> list) {
        this.list = list;
        notifyDataSetChanged();
    }

    @NonNull
    @Override
    public Myvh onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.right,parent,false);
        return new Myvh(view);
    }

    @Override
    public void onBindViewHolder(@NonNull Myvh holder, int position) {
        holder.title.setText(list.get(position).commodityName);
        Glide.with(context).load(list.get(position).masterPic).into(holder.imageView);
    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    public class Myvh extends RecyclerView.ViewHolder {

        private final ImageView imageView;
        private final TextView title;

        public Myvh(View itemView) {
            super(itemView);
            imageView = itemView.findViewById(R.id.image);
            title = itemView.findViewById(R.id.title);
        }
    }
}

leftbean


public class UserBean {
    public List<ResultBean> result;

    public static class ResultBean {

        public String id;
        public String name;


    }
}

rightbean


public class RightBean {
    public List<Bean>result;

    public static class Bean{
        public String commodityName;
        public String masterPic;
    }

}

自定义View



public class Views extends LinearLayout {

    public Button sao,sou;
    public EditText edit;

    public Views(Context context) {
        super(context);
    }

    public Views(Context context, AttributeSet attrs) {
        super(context, attrs);
        View view = LayoutInflater.from(context).inflate(R.layout.line,this);
        sao = view.findViewById(R.id.sao);
        edit = view.findViewById(R.id.edit);
        sou = view.findViewById(R.id.sou);


    }

    public Views(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
}

fragmentA


public class FragmentA extends Fragment implements IClaContance.IClaView,MyAdapter.onclicklisener {

    private Button sao;
    private Views ss;
    private RecyclerView mLeftRv;
    private RecyclerView mRightRv;
    private MyAdapter myAdapter;
    private RightAdapter rightAdapter;
    private ClaPresenter claPresenter;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment1,container,false);
        sao = view.findViewById(R.id.sao);
        ss = view.findViewById(R.id.ss);
        //得到列表id
        mRightRv = view.findViewById(R.id.right_rv);
        mLeftRv = view.findViewById(R.id.left_rv);

        mLeftRv.setLayoutManager(new LinearLayoutManager(getActivity()));
        mRightRv.setLayoutManager(new GridLayoutManager(getActivity(),2));

        myAdapter = new MyAdapter(getActivity());
        rightAdapter = new RightAdapter(getActivity());

        claPresenter = new ClaPresenter(this);
        claPresenter.clalist(new HashMap<String, String>());

        HashMap<String, String> hashMap = new HashMap<>();
        hashMap.put("a","鞋");
        claPresenter.claRightlist(hashMap);

        ss.sou.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String s = ss.edit.getText().toString();
                HashMap<String, String> hashMap = new HashMap<>();
                hashMap.put("a",s);
                claPresenter.claRightlist(hashMap);
            }
        });
        //点击扫描二维码
        ss.sao.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                QRCodeManager.getInstance()
                        .with(getActivity())
                        .setReqeustType(1)
                        .scanningQRCode(new OnQRCodeScanCallback() {
                            @Override
                            public void onCompleted(String result) {
                                Toast.makeText(getActivity(), "结果:" + result, Toast.LENGTH_SHORT).show();
                            }

                            @Override
                            public void onError(Throwable errorMsg) {
                                Toast.makeText(getActivity(), "扫描错误"+errorMsg.toString(),Toast.LENGTH_SHORT).show();
                            }

                            @Override
                            public void onCancel() {
                                Toast.makeText(getActivity(), "扫描任务取消了", Toast.LENGTH_SHORT).show();
                            }
                        });
            }
        });
        return view;
    }

    @Override
    public void success(String result) {
        UserBean userBean = new Gson().fromJson(result,UserBean.class);
        myAdapter.setList(userBean.result);
        myAdapter.setOnclicklisener(this);
        mLeftRv.setAdapter(myAdapter);
    }

    @Override
    public void error(String msg) {

    }

    @Override
    public void Rightsuccess(String result) {
        RightBean rightBean = new Gson().fromJson(result,RightBean.class);
        rightAdapter.setList(rightBean.result);
        mRightRv.setAdapter(rightAdapter);
    }

    @Override
    public void Righterror(String msg) {

    }

    @Override
    public void click(String cid) {
        getLeft(cid);
    }
    private void getLeft(String cid){
        HashMap<String,String>params=new HashMap<>();
        params.put("a",cid);
        claPresenter.claRightlist(params);
    }
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值