首页 分类 购物车

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

圆形搜索框

main_activity.xml布局(这是fragment)

   <TextView
       android:id="@+id/show"
       android:layout_width="0dp"
       android:layout_height="wrap_content"
       android:layout_weight="1"
       android:gravity="center"
       android:text="首页"
       android:textSize="20sp"
       />

   <TextView
       android:id="@+id/fenlei"
       android:layout_width="131dp"
       android:layout_height="wrap_content"
       android:layout_weight="1"
       android:gravity="center"
       android:text="分类"
       android:textSize="20sp" />
   <TextView
       android:id="@+id/shop"
       android:layout_width="0dp"
       android:layout_height="wrap_content"
       android:layout_weight="1"
       android:gravity="center"
       android:text="购物"
       android:textSize="20sp"
       />

mainactivity页面(实现fragment)

package com.umeng.soexample.a1121day19;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

import com.umeng.soexample.a1121day19.fragment.FenleiFragment;
import com.umeng.soexample.a1121day19.fragment.ShopFragment;
import com.umeng.soexample.a1121day19.fragment.ShouyeFragment;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private TextView show;
private TextView fenlei;
private TextView shop;
private ViewPager vp;
private List list;
private List mFragments;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
show=findViewById(R.id.show);
fenlei=findViewById(R.id.fenlei);
shop=findViewById(R.id.shop);
vp=findViewById(R.id.vp);
list=new ArrayList<>();
mFragments=new ArrayList<>();
mFragments.add(new ShouyeFragment());
mFragments.add(new FenleiFragment());
mFragments.add(new ShopFragment());

    show.setOnClickListener(this);
    fenlei.setOnClickListener(this);
    shop.setOnClickListener(this);
    vp.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {
        @Override
        public Fragment getItem(int position) {
            return mFragments.get(position);
        }

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

}

@Override
public void onClick(View v) {
    switch (v.getId()){
        case R.id.show:
            vp.setCurrentItem(0);
            break;
        case R.id.fenlei:
            vp.setCurrentItem(1);
            break;
        case R.id.shop:
            vp.setCurrentItem(2);
            break;
    }
}

}

然后是三个fragment页面的功能实现

首页的布局

<?xml version="1.0" encoding="utf-8"?>



<android.support.v7.widget.RecyclerView
android:id="@+id/recyview"
android:layout_width=“match_parent”
android:layout_height=“wrap_content”></android.support.v7.widget.RecyclerView>

先是固定的httputils

utils包的HttpUtils页面

package com.umeng.soexample.a1121day19.utils;

import android.os.Handler;

import com.google.gson.Gson;
import com.umeng.soexample.a1121day19.callback.ICallBcak;

import java.io.IOException;
import java.lang.reflect.Type;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

/**

  • Created by lenovo on 2018-11-21.
    */

public class HttpUtils {
private static volatile HttpUtils instance;

private OkHttpClient client;

private Handler handler = new Handler();

private  HttpUtils(){
    client=new OkHttpClient();
}

public static HttpUtils getInstance(){
    if (instance == null){
        synchronized (HttpUtils.class){
            if (null == instance){
                instance = new HttpUtils();
            }
        }
    }
    return instance;
}
public void get(String url, final ICallBcak callBack, final Type type){
    Request request = new Request.Builder()
            .url(url)
            .get()
            .build();
    Call call = client.newCall(request);
    call.enqueue(new Callback() {
        @Override
        public void onFailure(Call call, final IOException e) {
            handler.post(new Runnable() {
                @Override
                public void run() {
                    callBack.onFailed(e);
                }
            });
        }

        @Override
        public void onResponse(Call call, Response response) throws IOException {
            String string = response.body().string();
            Gson gson = new Gson();
            final Object o = gson.fromJson(string, type);

            handler.post(new Runnable() {
                @Override
                public void run() {
                    callBack.onSuccess(o);
                }
            });

        }
    });
}

}
固定的callback

callback包里的ICallBack页面

package com.umeng.soexample.a1121day19.callback;

/**

  • Created by lenovo on 2018-11-21.
    */

public interface ICallBcak {
void onSuccess(Object o);
void onFailed(Exception e);
}

接下来是首页的mvp

frist包里的model presenter view

NewsModel页面

package com.umeng.soexample.a1121day19.frist.model;

import com.umeng.soexample.a1121day19.callback.ICallBcak;
import com.umeng.soexample.a1121day19.utils.HttpUtils;

import java.lang.reflect.Type;

/**

  • Created by lenovo on 2018-11-21.
    */

public class NewsModel {
public void getNews(String url, ICallBcak callBack, Type type){
HttpUtils.getInstance().get(url,callBack,type);
}
}

NewsPresenter页面

package com.umeng.soexample.a1121day19.frist.presenter;

import com.google.gson.reflect.TypeToken;
import com.umeng.soexample.a1121day19.bean.News;
import com.umeng.soexample.a1121day19.callback.ICallBcak;
import com.umeng.soexample.a1121day19.frist.model.NewsModel;
import com.umeng.soexample.a1121day19.frist.view.IView;

import java.lang.reflect.Type;

/**

  • Created by lenovo on 2018-11-21.
    */

public class NewsPresenter {
private IView iv;
private NewsModel newsModel;

public void attach(IView iv) {
    this.iv = iv;
    newsModel = new NewsModel();
}

public void get(){

    Type type = new TypeToken<News>(){}.getType();

    newsModel.getNews("http://www.xieast.com/api/news/news.php", new ICallBcak() {
        @Override
        public void onSuccess(Object o) {
            News newsBean = (News) o;
            if (newsBean != null){
                iv.onSuccess(newsBean.getData());
            }
        }

        @Override
        public void onFailed(Exception e) {
            iv.onFailed(e);
        }
    },type);
}

}

NewsView页面

package com.umeng.soexample.a1121day19.frist.view;

import com.umeng.soexample.a1121day19.bean.News;

import java.util.List;

/**

  • Created by lenovo on 2018-11-21.
    */

public interface IView {
void onSuccess(List<News.DataBean> list);

void onFailed(Exception e);

}

bean包里的News实现接口

adapter包里的NewsAdapter

package com.umeng.soexample.a1121day19.adapter;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.bumptech.glide.Glide;
import com.umeng.soexample.a1121day19.R;
import com.umeng.soexample.a1121day19.bean.News;

import java.util.Li

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WeUI 是一个基于微信设计语言的 UI 框架,致力于提供一个更好用的移动端 web UI 解决方案,特别是微信网页设计。因此,使用 WeUI 进行微信网页模板的设计十分恰当。以下是我们的设计思路: 主页 在设计主页时,我们优先考虑用户需要第一时间获取的信息。我们在页面顶部设置了一个滑块组件,以便于用户更容易地浏览网站的主打产品或服务。我们使用分栏页面布局,让用户快速浏览不同的产品或活动信息。 购物 购物是一个重要的页面,需要让用户便捷简单地查看和修改购物信息。因此,我们使用了列表组件来展示用户在购物中添加了什么商品,包括商品的名称、价格、数量和总价。我们还设计了一个悬浮栏组件,让用户可以在任何页面快速地查看他们的购物信息和结算。 分类分类页面中,我们考虑了用户所关心的主要需求。我们使用 TabBar 组件来展示不同的分类,让用户可以快速找到他们想要的商品。我们还使用了搜索栏和面包屑组件,让用户可以更快速定位自己想要的商品。 后台 后台页面通常用于管理、设置、审核等操作。我们认为在设计这种页面时保证简洁易用是非常重要的。因此,我们设计了一个简洁、直观的面板页面,用于显示不同的管理设置信息。使用了环形图表和各种图标,让用户可以快速地了解他们关心的各种信息。我们也提供了一个菜单和导航栏,让用户可以快速访问各个管理功能。 总而言之,我们通过 WeUI 的各种组件以及合理的页面布局,设计出了一个微信网页模板。这个模板不仅简洁美观,而且非常易于用户操作,符合 WeUI 的设计目标。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值