Android自定义拦截器+展示数据+弹出框

本文展示了如何在Android应用中使用自定义拦截器加载数据,并结合布局实现订单状态筛选及弹出框功能。通过RadioGroup切换订单状态,XRecyclerView展示订单列表,点击触发弹出框进行确认操作,如取消订单。代码涵盖了布局设计、数据请求、弹窗展示及Presenter模式的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//activity_main布局
<?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="com.bwie.view.MainActivity">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="40dp">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:text="订单列表"
            android:textSize="25sp" />

        <ImageView
            android:id="@+id/iv_pop"
            android:layout_width="30dp"
            android:layout_height="30dp"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:layout_marginRight="10dp"
            android:background="@drawable/lv_icon" />
    </RelativeLayout>

    <RadioGroup
        android:id="@+id/rg"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:gravity="center_vertical"
        android:orientation="horizontal">

        <RadioButton
            android:id="@+id/rb1"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:button="@null"
            android:gravity="center"
            android:text="待支付" />

        <RadioButton
            android:id="@+id/rb2"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:button="@null"
            android:gravity="center"
            android:text="已支付" />

        <RadioButton
            android:id="@+id/rb3"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:button="@null"
            android:gravity="center"
            android:text="已取消" />
    </RadioGroup>

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

//XRecyclerView的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="200dp"
    android:descendantFocusability="blocksDescendants"
    android:orientation="vertical">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">

        <TextView
            android:id="@+id/tv_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true" />

        <TextView
            android:id="@+id/tv_status"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true" />
    </RelativeLayout>

    <TextView
        android:id="@+id/tv_price"
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:layout_centerVertical="true"
        android:layout_weight="1"
        android:textColor="#ff0000" />

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">

        <TextView
            android:id="@+id/tv_time"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <TextView
            android:id="@+id/tv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true" />
    </RelativeLayout>

</LinearLayout>
//弹出框布局
<?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="wrap_content"
    android:background="#ffffff"
    android:orientation="vertical">

    <TextView
        android:id="@+id/tv1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:text="待支付"/>

    <TextView
        android:id="@+id/tv2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:text="已支付"/>

    <TextView
        android:id="@+id/tv3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:text="已取消"/>
</LinearLayout>
//Model层的BaseModel
public class BaseModel {
    public Handler handler = new Handler(Looper.getMainLooper());
}
//OrderModel的接口
public interface IOrderModel {
    public void getOrders(String status, String page, OnNetListener<OrderBean> onNetListener);
}
//OrderModel数据-订单接口
public class OrderModel extends BaseModel implements IOrderModel {
    public void getOrders(String status, String page, final OnNetListener<OrderBean> onNetListener){
        Map<String,String> params = new HashMap<>();
        params.put("uid","71");
        params.put("status",status);
        params.put("page",page);
        HttpUtil.getHttpUtil().doPost(Api.ORDER, params, new Callback() {
            @Override
            public void onFailure(Call call, final IOException e) {
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        onNetListener.onFailure(e);
                    }
                });
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                String string = response.body().string();
                final OrderBean orderBean = new Gson().fromJson(string, OrderBean.class);
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        onNetListener.onSuccess(orderBean);
                    }
                });
            }
        });
    }
}
//取消订单接口
public interface ICancleModel {
    public void doCancle(String status, String orderId, OnNetListener onNetListener);
}
//取消订单的数据
public class CancleModel extends BaseModel implements ICancleModel {
    public void doCancle(String status, String orderId, OnNetListener onNetListener){
        Map<String,String> params = new HashMap<>();
        params.put("uid","71");
        params.put("status",status);
        params.put("orderId",orderId);
        HttpUtil.getHttpUtil().doPost(Api.CANCLE_ORDER, params, new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {

            }
        });
    }
}
//MainActivity的接口
public interface IMainActivity {
    public void showData(boolean isRefresh, List<OrderBean.DataBean> list);
}
//MainActivity
public class MainActivity extends AppCompatActivity implements View.OnClickListener,IMainActivity {

    private ImageView mIvPop;
    /**
     * 待支付
     */
    private RadioButton mRb1;
    /**
     * 已支付
     */
    private RadioButton mRb2;
    /**
     * 已取消
     */
    private RadioButton mRb3;
    private RadioGroup mRg;
    private XRecyclerView mXrv;
    private List<OrderBean.DataBean> list = new ArrayList<>();
    private RvAdapter adapter;
    private OrderPresenter orderPresenter = new OrderPresenter(this);
    private int page = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        //布局管理,设置适配器
        mXrv.setLayoutManager(new LinearLayoutManager(this));
        adapter = new RvAdapter(this, list);
        mXrv.setAdapter(adapter);
        //获取数据
        orderPresenter.getOrder(true,"1",page+"");
        mXrv.setLoadingListener(new XRecyclerView.LoadingListener() {
            @Override
            public void onRefresh() {
                page = 1;
                orderPresenter.getOrder(true,"1",page+"");
            }

            //加载更多
            @Override
            public void onLoadMore() {
                page++;
                orderPresenter.getOrder(false,"1",page+"");
            }
        });
    }

    //调用销毁的方法销毁
    @Override
    protected void onDestroy() {
        super.onDestroy();
        orderPresenter.dettach();
    }

    private void initView() {
        mIvPop = (ImageView) findViewById(R.id.iv_pop);
        mIvPop.setOnClickListener(this);
        mRb1 = (RadioButton) findViewById(R.id.rb1);
        mRb2 = (RadioButton) findViewById(R.id.rb2);
        mRb3 = (RadioButton) findViewById(R.id.rb3);
        mRg = (RadioGroup) findViewById(R.id.rg);
        mXrv = (XRecyclerView) findViewById(R.id.xrv);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            default:
                break;
            case R.id.iv_pop:
                View view = View.inflate(this, R.layout.pop_item, null);
                TextView tv1 = (TextView) view.findViewById(R.id.tv1);
                TextView tv2 = (TextView) view.findViewById(R.id.tv2);
                TextView tv3 = (TextView) view.findViewById(R.id.tv3);
                LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
                PopupWindow popupWindow = new PopupWindow(view, params.width, params.height);
                popupWindow.showAsDropDown(mIvPop,0,30);
                break;
        }
    }

    @Override
    public void showData(boolean isRefresh, List<OrderBean.DataBean> newList) {
        if (isRefresh){
            list.clear();
            list.addAll(newList);
            mXrv.refreshComplete();
        } else {
            list.addAll(newList);
        }
        adapter.notifyDataSetChanged();
    }
}
//RecyclerView适配器
public class RvAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private Context context;
    private List<OrderBean.DataBean> list;

    public RvAdapter(Context context, List<OrderBean.DataBean> list) {
        this.context = context;
        this.list = list;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.item, parent, false);
        return new MyViewHolder(view);
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        OrderBean.DataBean dataBean = list.get(position);
        MyViewHolder holder1 = (MyViewHolder) holder;
        holder1.tv_title.setText(dataBean.getTitle());
        int status = dataBean.getStatus();
        if (status == 0){
            holder1.tv_status.setText("待支付");
            holder1.tv.setText("取消订单");
            holder1.tv_status.setTextColor(Color.RED);
        } else if (status == 1){
            holder1.tv_status.setText("已支付");
            holder1.tv.setText("查看订单");
            holder1.tv_status.setTextColor(Color.BLACK);
        } else {
            holder1.tv_status.setText("已取消");
            holder1.tv.setText("查看订单");
            holder1.tv_status.setTextColor(Color.BLACK);
        }
        holder1.tv_price.setText("价格:"+dataBean.getPrice());
        holder1.tv_time.setText("创建时间:"+dataBean.getCreatetime());
        //取消订单
        holder1.tv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new AlertDialog.Builder(context)
                        .setTitle("提示")
                        .setMessage("确定取消订单吗?")
                        .setPositiveButton("是", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {

                            }
                        })
                        .setNegativeButton("否", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {

                            }
                        })
                        .show();
            }
        });
    }

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

    class MyViewHolder extends RecyclerView.ViewHolder {
        TextView tv_title;
        TextView tv_status;
        TextView tv_price;
        TextView tv_time;
        TextView tv;


        public MyViewHolder(View itemView) {
            super(itemView);
            tv_title = (TextView) itemView.findViewById(R.id.tv_title);
            tv_status = (TextView) itemView.findViewById(R.id.tv_status);
            tv_price = (TextView) itemView.findViewById(R.id.tv_price);
            tv_time = (TextView) itemView.findViewById(R.id.tv_time);
            tv = (TextView) itemView.findViewById(R.id.tv);
        }
    }
}
//订单数据的Presenter-OrderPresenter
public class OrderPresenter {
    private OrderModel orderModel;
    private IMainActivity iMainActivity;

    public OrderPresenter(IMainActivity iMainActivity) {
        this.orderModel = new OrderModel();
        this.iMainActivity = iMainActivity;
    }
    public void getOrder(final boolean isRefresh, String status, String page){
        orderModel.getOrders(status, page, new OnNetListener<OrderBean>() {
            @Override
            public void onSuccess(OrderBean orderBean) {
                iMainActivity.showData(isRefresh,orderBean.getData());
            }

            @Override
            public void onFailure(Exception e) {

            }
        });
    }
    public void dettach(){
        if (iMainActivity != null){
            iMainActivity = null;
        }
    }
}
//取消订单的presenter层
public class CanclePresenter {
    private CancleModel cancleModel;

    public CanclePresenter(CancleModel cancleModel) {
        this.cancleModel = cancleModel;
    }
    public void cancleOrder(String status,String orderId){
        cancleModel.doCancle(status, orderId, new OnNetListener() {
            @Override
            public void onSuccess(Object o) {

            }

            @Override
            public void onFailure(Exception e) {

            }
        });
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值