Android购物分类效果实现
作者:FanRQ_ 发布时间:2021-09-20 02:04:10
标签:Android,购物,分类
本文实例为大家分享了Android购物分类效果展示的具体代码,供大家参考,具体内容如下
SecondActivity.java
public class SecondActivity extends AppCompatActivity{
private ViewPager mPager;
private RadioGroup mRadioGroup;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second);
mPager = findViewById(R.id.pager);
mRadioGroup = findViewById(R.id.group);
mPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {
@Override
public Fragment getItem(int position) {
Fragment fragment=null;
switch (position){
case 0:
fragment = new Afrag();
break;
case 1:
fragment = new Bfrag();
break;
case 2:
fragment = new Cfrag();
break;
}
return fragment;
}
@Override
public int getCount() {
return 3;
}
});
mRadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup radioGroup, int i) {
switch (i){
case R.id.r1:
mPager.setCurrentItem(0);
break;
case R.id.r2:
mPager.setCurrentItem(1);
break;
case R.id.r3:
mPager.setCurrentItem(2);
break;
}
}
});
}
}
secondActivity.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="13"/>
<RadioGroup
android:id="@+id/group"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="horizontal">
<RadioButton
android:id="@+id/r1"
android:layout_width="wrap_content"
android:layout_weight="1"
android:layout_height="match_parent"
android:button="@null"
android:gravity="center"
android:text="首页"/>
<RadioButton
android:id="@+id/r2"
android:layout_width="wrap_content"
android:layout_weight="1"
android:layout_height="match_parent"
android:button="@null"
android:gravity="center"
android:text="分类"/>
<RadioButton
android:id="@+id/r3"
android:layout_width="wrap_content"
android:layout_weight="1"
android:layout_height="match_parent"
android:button="@null"
android:gravity="center"
android:text="购物车"/>
</RadioGroup>
</LinearLayout>
Afrag.java
public class Afrag extends Fragment{
private RecyclerView mRecyclerView;
public String urlString="http://www.wanandroid.com/tools/mockapi/6523/restaurants_offset_0_limit_4 ";
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = View.inflate(getActivity(), R.layout.afrag, null);
mRecyclerView = view.findViewById(R.id.rv);
initData();
return view;
}
private void initData() {
OkHttps okHttps = OkHttps.getInstance();
okHttps.doGet(urlString, new OkHttps.OkCallback() {
@Override
public void onResponse(String json) { //瀑布流
PubuBean pubuBean = new Gson().fromJson(json,PubuBean.class);
List<PubuBean.DataBean> results = pubuBean.getData();
PubuAdapter pubuAdapter = new PubuAdapter(getActivity());
pubuAdapter.setDatas(results);
mRecyclerView.setAdapter(pubuAdapter);
StaggeredGridLayoutManager manager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
mRecyclerView.setLayoutManager(manager);
}
@Override
public void onFailure(Exception e) {
}
});
}
}
afrag.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/rv"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
PubuAdapter.java
public class PubuAdapter extends RecyclerView.Adapter<PubuAdapter.ViewHolder>{
private Context mContext;
ArrayList<PubuBean.DataBean> list;
public PubuAdapter(Context context) {
mContext = context;
list = new ArrayList<>();
}
public void setDatas(List<PubuBean.DataBean> datas) {
list.addAll(datas);
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = View.inflate(mContext, R.layout.pbitem, null);
ViewHolder holder = new ViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
holder.mTextView.setText(list.get(position).getName());
Glide.with(mContext).load(list.get(position).getPic_url()).into(holder.mImageView);
}
@Override
public int getItemCount() {
return list.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
ImageView mImageView;
TextView mTextView;
public ViewHolder(View itemView) {
super(itemView);
mImageView = itemView.findViewById(R.id.image);
mTextView = itemView.findViewById(R.id.t1);
}
}
}
Bfrag.java
public class Bfrag extends Fragment{
private RecyclerView mRecyclerView;
LeftAdapter adapter;
String urlString="http://www.zhaoapi.cn/product/getCatagory";
String urlString2="http://www.zhaoapi.cn/product/getProductCatagory";
private RecyclerView mRecyclerView2;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = View.inflate(getActivity(), R.layout.bfrag, null);//分类页面
mRecyclerView = view.findViewById(R.id.rv1); //左侧列表
mRecyclerView2 = view.findViewById(R.id.rv2); //右
initData();
return view;
}
private void initData() {
OkHttps okHttps = OkHttps.getInstance();
okHttps.doGet(urlString, new OkHttps.OkCallback() {
@Override
public void onResponse(String json) { //瀑布流
LeftBean leftBean = new Gson().fromJson(json,LeftBean.class);
List<LeftBean.DataBean> results = leftBean.getData();
adapter = new LeftAdapter(getActivity());
adapter.setDatas(results);
mRecyclerView.setAdapter(adapter);
mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity(),LinearLayoutManager.VERTICAL,false));
adapter.setOnItemClickListener(new LeftAdapter.OnItemClickListener() {
@Override
public void onItemClick(int position) {
//Toast.makeText(getActivity(),position+"",Toast.LENGTH_SHORT).show();
rigth(position);
}
});
}
@Override
public void onFailure(Exception e) {
}
});
}
public void rigth(int position){
HashMap<String, String> map = new HashMap<>();
map.put("cid",position+1+"");
OkHttps.getInstance().doPost(urlString2,map,new OkHttps.OkCallback() {
@Override
public void onResponse(String json) {
RightBean rightBean = new Gson().fromJson(json,RightBean.class);
List<RightBean.DataBean> results = rightBean.getData();
RightAdapter rightAdapter = new RightAdapter(getActivity());
rightAdapter.setDatas(results);
mRecyclerView2.setAdapter(rightAdapter);
mRecyclerView2.setLayoutManager(new GridLayoutManager(getActivity(),3));
}
@Override
public void onFailure(Exception e) {
}
});
}
}
bfrag.xml
<android.support.v7.widget.RecyclerView
android:id="@+id/rv1"
android:layout_width="0dp"
android:layout_weight="2"
android:layout_height="match_parent"/>
<android.support.v7.widget.RecyclerView
android:id="@+id/rv2"
android:layout_width="0dp"
android:layout_weight="10"
android:layout_height="match_parent"/>
</LinearLayout>
LeftAdapter.java
public class LeftAdapter extends RecyclerView.Adapter<LeftAdapter.ViewHolder>{
private Context mContext;
ArrayList<LeftBean.DataBean> list;
public LeftAdapter(Context context) {
mContext = context;
list = new ArrayList<>();
}
public void setDatas(List<LeftBean.DataBean> datas) {
list.addAll(datas);
}
public interface OnItemClickListener{ //自定义接口回调设置点击事件
void onItemClick(int position);
}
private OnItemClickListener mOnItemClickListener;
public void setOnItemClickListener(OnItemClickListener onItemClickListener){
mOnItemClickListener=onItemClickListener;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = View.inflate(mContext, R.layout.leftitem, null);
ViewHolder holder = new ViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(@NonNull final ViewHolder holder, int position) {
holder.mTextView.setText(list.get(position).getName());
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int position1 = holder.getLayoutPosition();
mOnItemClickListener.onItemClick(position1);
}
});
}
@Override
public int getItemCount() {
return list.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
TextView mTextView;
public ViewHolder(View itemView) {
super(itemView);
mTextView = itemView.findViewById(R.id.text1);
}
}
}
RightAdapter.java
public class RightAdapter extends RecyclerView.Adapter<RightAdapter.ViewHolder>{
private Context mContext;
ArrayList<RightBean.DataBean> list;
public RightAdapter(Context context) {
mContext = context;
list = new ArrayList<>();
}
public void setDatas(List<RightBean.DataBean> datas) {
list.addAll(datas);
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = View.inflate(mContext, R.layout.rightitem, null);
ViewHolder holder = new ViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
holder.mTextView.setText(list.get(position).getName());
Glide.with(mContext).load(list.get(position).getList().get(position).getIcon()).into(holder.mImageView);
}
@Override
public int getItemCount() {
return list.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
ImageView mImageView;
TextView mTextView;
public ViewHolder(View itemView) {
super(itemView);
mImageView = itemView.findViewById(R.id.image1);
mTextView = itemView.findViewById(R.id.text2);
}
}
}
OkHttps.java
public class OkHttps {
Handler handler;
private final OkHttpClient mOkHttpClient;
private static OkHttps mOkHttps;
private OkHttps() {
handler = new Handler(Looper.getMainLooper());
LoggingInterceptor loggingInterceptor = new LoggingInterceptor(); //日志 *
mOkHttpClient = new OkHttpClient.Builder()
.addInterceptor(loggingInterceptor) //设置日志 *
.connectTimeout(5000, TimeUnit.MILLISECONDS)
.readTimeout(5000,TimeUnit.MILLISECONDS)
.writeTimeout(5000,TimeUnit.MILLISECONDS)
.build();
}
public static OkHttps getInstance(){
if (mOkHttps==null){
synchronized (OkHttps.class){
if (mOkHttps==null){
return mOkHttps=new OkHttps();
}
}
}
return mOkHttps;
}
public interface OkCallback{
void onResponse(String json);
void onFailure(Exception e);
}
public void doPost(String url, Map<String,String> map, final OkCallback okCallback){
FormBody.Builder builder = new FormBody.Builder();
if (map!=null){
for (String key:map.keySet()){
builder.add(key,map.get(key));
}
}
FormBody formBody = builder.build();
final Request request = new Request.Builder()
.post(formBody)
.url(url)
.build();
Call call = mOkHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, final IOException e) {
if (okCallback!=null){
handler.post(new Runnable() {
@Override
public void run() {
okCallback.onFailure(e);
}
});
}
}
@Override
public void onResponse(Call call, Response response) throws IOException {
try {
if (response!=null && response.isSuccessful()){
final String json = response.body().string();
handler.post(new Runnable() {
@Override
public void run() {
if (okCallback!=null){
okCallback.onResponse(json);
return;
}
}
});
}
}catch (IOException e){
e.printStackTrace();
}
if (okCallback!=null){
okCallback.onFailure(new Exception("网络异常"));
}
}
});
}
public void doGet(String url, final OkCallback okCallback){
Request request = new Request.Builder()
.url(url)
.build();
Call call = mOkHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, final IOException e) {
if (okCallback != null) {
//切换到主线程
handler.post(new Runnable() {
@Override
public void run() {
okCallback.onFailure(e);
}
});
}
}
@Override
public void onResponse(Call call, Response response) throws IOException {
try {
if (response != null && response.isSuccessful()) {
final String json = response.body().string();
handler.post(new Runnable() {
@Override
public void run() {
if (okCallback != null) {
okCallback.onResponse(json);
}
}
});
}
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
}
依赖
implementation 'com.google.code.gson:gson:2.8.5'
implementation 'com.squareup.okhttp3:okhttp:3.12.0'
implementation 'com.android.support:recyclerview-v7:27.1.1'
implementation 'com.github.bumptech.glide:glide:3.7.0'
LoggingInterceptor.java // *
class LoggingInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
//拿到Request对象
Request request = chain.request();
long t1 = System.nanoTime();
System.out.println(" request = " + String.format("Sending request %s on %s%n%s",
request.url(), chain.connection(), request.headers()));
//拿到Response对象
Response response = chain.proceed(request);
long t2 = System.nanoTime();
//得出请求网络,到得到结果,中间消耗了多长时间
System.out.println("response " + String.format("Received response for %s in %.1fms%n%s",
response.request().url(), (t2 - t1) / 1e6d, response.headers()));
return response;
}
}
来源:https://blog.csdn.net/FanRQ_/article/details/84346984


猜你喜欢
- 今天导入了一个模型,但是模型贴图丢失了,而且Inspector面板中处于不能编辑的状态虽然可以通过重新创建材质来替换,但是这样会生成一个新的
- 前言本文给你提供在Spring Boot 应用程序中编写好的单元测试的机制,并且深入技术细节。我们将带你学习如何以可测试的方式创建Sprin
- 添加标题在 Winfrom 界面中添加一个 ListView 组件,然后点击右上角的箭头,点击编辑列添加下面标题,然后点击确定此时 List
- 切面编程听起来可能有点陌生,不过现在越来越多的开发团队正在用上这种技术。先说熟悉的面向对象编程 OOP,通常都是用各种对象/模块来负责具体的
- 1 Mybatis-Plus简介Mybatis-Plus 提供了多种方式来执行 SQL,包括使用注解、XML 映射文件和 Lambda 表达
- springboot配置文件中属性变量引用@@这种属性应用方式是field_name=@field_value@。两个@符号是springb
- 组合模式是一种常见的设计模式(但我感觉有点复杂)也叫合成模式,有时又叫做部分-整体模式,主要是用来描述部分与整体的关系。个人理解:组合模式就
- static关键字在Java中,static是静态修饰关键字。用于修饰类的成员方法、类的成员变量,另外可以编写static代码块来优化程序性
- SpringBoot整合junitSpringBoot整合junit①还是一样,我们首先创建一个SpringBoot模块。由于我们并不测试前
- 在刚接触后台线程的时候,觉得线程神秘且高深,并且时常有先辈们千叮万嘱:能不用的时候,尽量不要用,千万不要滥用线程,否则会发生预料不到的结果。
- 前言:最近准备研究一下图片缓存框架,基于这个想法觉得还是先了解有关图片缓存的基础知识,今天重点学习一下Bitmap、BitmapFactor
- 声明:本文中资源全部收集整理于网络并无偿提供,仅可用于个人学习交流;请勿转载、售卖或商用;侵权联删!免责声明:本教程所有资源均来源于网络;仅
- 本文实例为大家分享了Android文件下载功能的具体代码,供大家参考,具体内容如下1.普通单线程下载文件:直接使用URLConnection
- 本文实例讲述了Android编程实现自定义ProgressBar样式。分享给大家供大家参考,具体如下:效果图如下,本例中设置了第一级进度条和
- 由于对运算符重载不是多么理解诶,于是就百度了一下,结果发现一个解释很有趣的百度知道,分享看看。回答:+-*/这样的运算符重定义,比如你自定义
- 之前看过一句话,说的特别好。有人问阅读源码有什么用?学习别人实现某个功能的设计思路,提高自己的编程水平。是的,大家都实现一个功能,不同的人有
- springboot-dubbo cannot be cast to使用spring boot 集成dubbo的时候遇到问题:2018-05
- ADO.NET数据访问技术的一个突出特点就是支持离线访问,而实现这种离线访问的技术核心急速DataSet对象,该对象通过数据驻留在内存来实现
- properties和yml的区别这几天刚好看到Spring Boot当中有两种配置文件的方式,但是这两种配置方式有什么区别呢?proper
- java 中 * 机制的实例讲解在学习Spring的时候,我们知道Spring主要有两大思想,一个是IoC,另一个就是AOP,对于IoC,