商品列表线性和网格切换

//MainActivity

public class MainActivity extends AppCompatActivity
 implements View.OnClickListener, DataCall<List<Goods>> ,
XRecyclerView.LoadingListener,
MyAdapter.MyInterface {
    
        private ImageView sou;
        private Button bt;
        private EditText et;
        String url="http://www.zhaoapi.cn/product/searchProducts?keywords=手机&page=1";
        List<Goods> list = new ArrayList<>();
        int page=1;
        int sort=0;
        boolean a=true;
        private GridAdapter gridAdapter;
        private GridLayoutManager gridLayoutManager;
        private MyAdapter myAdapter;
        private LinearLayoutManager linearLayoutManager;
        private XRecyclerView xrv;
        private ListPersenter listPersenter;
        String urls=url+page+"&sort="+sort;
        private String trim;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            sou = findViewById(R.id.sou);
            bt = findViewById(R.id.bt);
            et = findViewById(R.id.et);
            xrv = findViewById(R.id.xrv);
            bt.setOnClickListener(this);
            sou.setOnClickListener(this);
    
            listPersenter = new ListPersenter(this);
    
            listPersenter.get(url);
            xrv.setLoadingListener(this);
            myAdapter = new MyAdapter(this, list);
            linearLayoutManager = new LinearLayoutManager(this);
            xrv.setLayoutManager(linearLayoutManager);
            xrv.setAdapter(myAdapter);
            xrv.refresh();
    
            myAdapter.setOnclick(this);
    
    
        }
    
    
    
        @Override
        public void success(List<Goods> goods) {
            xrv.loadMoreComplete();
            xrv.refreshComplete();
            list.addAll(goods);
            myAdapter.notifyDataSetChanged();
    
    //      gridAdapter.notifyDataSetChanged();
        }
    
        @Override
        public void fail(Result result) {
            Toast.makeText(MainActivity.this,"失败",Toast.LENGTH_LONG).show();
        }
    
        @Override
        public void onRefresh() {
            listPersenter.get(url);
        }
    
        @Override
        public void onLoadMore() {
            listPersenter.get(url);
        }
    
        @Override
        public void onClick(View v) {
            Toast.makeText(this, "哈哈哈", Toast.LENGTH_SHORT).show();
            switch (v.getId()){
    
                case R.id.sou:
                    list.clear();
                    trim = et.getText().toString().trim();
                    page=1;
                    sort=0;
                    url = "http://www.zhaoapi.cn/product/searchProducts?keywords="+ trim +"&page=";
                    String urls=url+page+"&sort="+sort;
                    listPersenter.get(urls);
                    break;
                case R.id.bt:
                    if (a){
                        gridAdapter = new GridAdapter(MainActivity.this,list);
                        gridLayoutManager = new GridLayoutManager(MainActivity.this,2);
                        xrv.setLayoutManager(gridLayoutManager);
                        xrv.setAdapter(gridAdapter);
                        a=false;
                    }else {
    //                    adapter = new ListAdapter(MainActivity.this,list);
                        myAdapter = new MyAdapter(this, list);
                        linearLayoutManager = new LinearLayoutManager(MainActivity.this);
                        xrv.setLayoutManager(linearLayoutManager);
                        xrv.setAdapter(myAdapter);
                        a=true;
                    }
                    break;
    
            }
        }
    
        @Override
        public void onClick(Goods goods) {
            Intent intent = new Intent(this, TwoActivity.class);
            intent.putExtra("url", goods.getDetailUrl());
            startActivity(intent);
        }
    }

//布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    tools:context=".activity.MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <ImageView
            android:id="@+id/sou"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:src="@mipmap/ic_launcher"/>
        <EditText
            android:id="@+id/et"
            android:layout_weight="1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="搜索"/>
        <Button
            android:id="@+id/bt"
            android:layout_width="50dp"
            android:layout_height="wrap_content"
            android:text="田"/>
    </LinearLayout>

    <com.jcodecraeer.xrecyclerview.XRecyclerView
        android:id="@+id/xrv"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </com.jcodecraeer.xrecyclerview.XRecyclerView>

</LinearLayout>

//线性适配器

public class MyAdapter extends XRecyclerView.Adapter<MyAdapter.MyViewHolder> {

    private Context context;
    private List<Goods> list;
    private MyInterface myInterface;

    public void setOnclick(MyInterface un) {
        this.myInterface = un;
    }

    public interface MyInterface{
        void onClick(Goods goods);
    }


    public MyAdapter(Context context, List<Goods> list) {
        this.context = context;
        this.list = list;
    }

    @NonNull
    @Override
    public MyAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View view = View.inflate(context, R.layout.item1,null);
        return new MyViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull final MyAdapter.MyViewHolder myViewHolder, final int i) {
        myViewHolder.tv1.setText(list.get(i).getTitle());
        myViewHolder.tv2.setText("¥"+list.get(i).getPrice()+"");
        String images = list.get(i).getImages();
        String[] split = images.split("\\|");
        Glide.with(context).load(split[0]).into(myViewHolder.iv1);
        final Goods goods = list.get(i);
// 点击跳转
        myViewHolder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                myInterface.onClick(goods);
//                context.startActivity(new Intent(context,WebActivity.class));
            }
        });


        myViewHolder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(myViewHolder.itemView, "alpha", 1, 0);
                objectAnimator.setInterpolator(new AccelerateInterpolator());
                objectAnimator.setDuration(1000);
                objectAnimator.addListener(new Animator.AnimatorListener() {
                    @Override
                    public void onAnimationStart(Animator animation) {

                    }

                    @Override
                    public void onAnimationEnd(Animator animation) {
                        list.remove(i);
                        notifyDataSetChanged();
                    }

                    @Override
                    public void onAnimationCancel(Animator animation) {
                        list.remove(i);
                        notifyDataSetChanged();
                    }

                    @Override
                    public void onAnimationRepeat(Animator animation) {

                    }
                });

                objectAnimator.start();

                return true;
            }
        });
    }



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


    public static class MyViewHolder extends RecyclerView.ViewHolder {

        private final ImageView iv1;
        private final TextView tv1;
        private final TextView tv2;

        public MyViewHolder(@NonNull View itemView) {
            super(itemView);

            iv1 = itemView.findViewById(R.id.iv1);
            tv1 = itemView.findViewById(R.id.tv1);
            tv2 = itemView.findViewById(R.id.tv2);

        }

    }


}

//网格适配器

public class GridAdapter extends XRecyclerView.Adapter<GridAdapter.MyViewHolder> {
    private Context context;
    private List<Goods> list;

    public GridAdapter(Context context, List<Goods> list) {
        this.context = context;
        this.list = list;
    }

    @NonNull
    @Override
    public GridAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View view = View.inflate(context, R.layout.item2,null);
        return new MyViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull GridAdapter.MyViewHolder myViewHolder, int i) {
        myViewHolder.tv1.setText(list.get(i).getTitle());
        myViewHolder.tv2.setText("¥"+list.get(i).getPrice()+"");
        String images = list.get(i).getImages();
        String[] split = images.split("\\|");
        Glide.with(context).load(split[0]).into(myViewHolder.iv1);

    }

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

    public class MyViewHolder extends RecyclerView.ViewHolder {
        private final ImageView iv1;
        private final TextView tv1;
        private final TextView tv2;

        public MyViewHolder(@NonNull View itemView) {
            super(itemView);

            iv1 = itemView.findViewById(R.id.iv1);
            tv1 = itemView.findViewById(R.id.tv1);
            tv2 = itemView.findViewById(R.id.tv2);

        }
    }
}

//接口

public interface DataCall<T> {
    void success(T t);
    void fail(Result result);
}
public interface GoodsInterface<T> {
    void success(T data);
    void fail(Result result);
}


//OkHttpClient请求数据
public class Utils {
    public static String get(String url) {
        OkHttpClient okHttpClient = new OkHttpClient();

        Request request = new Request.Builder().url(url).build();

        Call call = okHttpClient.newCall(request);

        try {
            Response execute = call.execute();
            return execute.body().string();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "";
    }
}

//MVP M层代码

public class ListModle {
    public static Result get(String url) {
        String s = Utils.get(url);
        Type type = new TypeToken<Result<List<Goods>>>() {
        }.getType();
        Gson gson = new Gson();
        Result result = gson.fromJson(s, type);
        return result;
    }
}

P层代码

public class ListPersenter {

    private DataCall dataCall;

    public ListPersenter(DataCall dataCall) {
        this.dataCall = dataCall;
    }

    Handler handler = new Handler(Looper.getMainLooper()){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            Result result = (Result) msg.obj;
            if (result.getCode().equals("0")){
                dataCall.success(result.getData());
            }else {
                dataCall.fail(result);
            }

        }
    };

    public void get(final String url){
        new Thread(new Runnable() {
            @Override
            public void run() {
                Result result = ListModle.get(url);
                Message message = handler.obtainMessage();
                message.obj=result;
                handler.sendMessage(message);
            }
        }).start();
    }
}

//跳转到详情页面

public class TwoActivity extends AppCompatActivity {

    private WebView web;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_two);

        web = findViewById(R.id.web);
        WebSettings settings = web.getSettings();
        settings.setJavaScriptEnabled(true);
        settings.setJavaScriptCanOpenWindowsAutomatically(true);

        // 得到url
        String url = getIntent().getStringExtra("url");
        // 将网址改为http
        String replace = url.replace("https", "http");
        web.loadUrl(replace);//使用WebView加载

        web.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                return false;
            }

            @Override
            public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
                return false;
            }
        });
        //
        web.setWebChromeClient(new WebChromeClient());
    }
}

//TwoActivity布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".activity.TwoActivity">

    <WebView
        android:id="@+id/web"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值