控件

控件分类 控件是指对数据和方法的封装。控件可以有自己的属性和方法,其中属性是控件数据的简单访问者,方法则是控件的一些简单而可见的功能,控件创建过程包括设计、开发、调试(就是所谓的3Ds开发流程,即Design、Develop、Debug)工作,然后是控件的使用。开发者应该掌握的三项主要内容是属性、事件和方法。控件根据用途上可以分为四种:内容控件(Content Controls)、条目控件(Items Co... 阅读详情

这个是组合控件
public class Myview extends LinearLayout {
TextView jian , shu , jia;
private int num;
GetMyCALL getMyCALL;

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

public Myview(Context context,AttributeSet attrs) {
    super(context, attrs);
    View view = LayoutInflater.from(context).inflate(R.layout.activity_listview,this);
    jian = view.findViewById(R.id.list_jian);
    shu = view.findViewById(R.id.list_shu);
    jia = view.findViewById(R.id.list_jia);

    jia.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            num++;
            shu.setText(num+"");
            getMyCALL.setass(num);
        }
    });

    jian.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            num--;
            shu.setText(num+"");
            getMyCALL.setass(num);
        }
    });


}

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

public void setdata(int num) {
    this.num = num;
    shu.setText(num+"");
}

public interface GetMyCALL{
    public void setass(int nuss);
}


public void setGetMyCALL(GetMyCALL call){
    getMyCALL = call;
}

}

		fragment

public class Show_Fragment extends Fragment implements CounetFace.ViewShowInterFace {
CounetFace.PresenterFace presenterFace;
CheckBox qx;

RecyclerView recyclerView;
TextView zong;
public List<NewsBean.DataBean> n_list = new ArrayList<>();
MyAdapter adapter;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.show_fragment, container, false);
    qx = view.findViewById(R.id.show_qx);
    recyclerView = view.findViewById(R.id.show_RecyclerView);
    zong = view.findViewById(R.id.show_zong);
    return view;
}

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    presenterFace = new MyPresnter<>(this);
    presenterFace.PshowFace();
    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());
    linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
    recyclerView.setLayoutManager(linearLayoutManager);

    //设置适配器
    adapter = new MyAdapter(n_list, getActivity(), this);
    recyclerView.setAdapter(adapter);

    //全选和反选
    qx.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            int sum = 0;
            boolean qxChecked = qx.isChecked();
            if (qxChecked){
                for (int i = 0; i <n_list.size() ; i++) {
                    n_list.get(i).IsSelect = qxChecked;
                    for (int j = 0; j <n_list.get(i).getList().size() ; j++) {
                        n_list.get(i).getList().get(j).ItemIsSelect = qxChecked;
                        //计算总价
                        sum += n_list.get(i).getList().get(j).getPrice()*
                                n_list.get(i).getList().get(j).getNum();
                    }
                }
            }else{
                //计算总价
                sum = 0;
                for (int i = 0; i <n_list.size() ; i++) {
                    n_list.get(i).IsSelect = qxChecked;
                    for (int j = 0; j <n_list.get(i).getList().size() ; j++) {
                        n_list.get(i).getList().get(j).ItemIsSelect = qxChecked;
                    }
                }
            }
            //计算总价
            zong.setText(sum+"");
            adapter.notifyDataSetChanged();
        }
    });

    //回调接口1层
    adapter.setMyCallBackFace(new MyAdapter.MyCallBackFace() {
        @Override
        public void setmycall(List<NewsBean.DataBean> list) {
            int sum = 0;
            int sssum = 0;
            for (int i = 0; i <list.size() ; i++) {
                boolean isSelect = list.get(i).IsSelect;
                if (isSelect){
                    sssum++;
                    for (int j = 0; j <list.get(i).getList().size() ; j++) {
                        //计算总价
                        sum += list.get(i).getList().get(j).getPrice()*
                                list.get(i).getList().get(j).getNum();
                    }
                }else{
                    for (int j = 0; j <list.get(i).getList().size() ; j++) {
                        if (list.get(i).getList().get(j).ItemIsSelect){
                            sum += list.get(i).getList().get(j).getPrice()*
                                    list.get(i).getList().get(j).getNum();
                        }
                    }
                }
            }
            if (sssum == list.size()){
                qx.setChecked(true);
            }else{
                qx.setChecked(false);
            }
            //计算总价
            zong.setText(sum+"");
            adapter.notifyDataSetChanged();
        }
    });


}

// adapter1
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.holder> {
List<NewsBean.DataBean> n_list;
Context context;
Show_Fragment show_fragment;
private MyCallBackFace face;

public MyAdapter(List<NewsBean.DataBean> n_list, Context context, Show_Fragment show_fragment) {
    this.n_list = n_list;
    this.context = context;
    this.show_fragment = show_fragment;
}

@NonNull
@Override
public holder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    View view = LayoutInflater.from(context).inflate(R.layout.activity_myadapter,null);
    return new holder(view);
}

@Override
public void onBindViewHolder(@NonNull final holder holder, final int i) {
holder.checkBox.setChecked(n_list.get(i).IsSelect);
holder.textView.setText(n_list.get(i).getSellerName());

    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(context);
    linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
    holder.recyclerView.setLayoutManager(linearLayoutManager);

    MyAdapter_Adapter2 adapter2 = new MyAdapter_Adapter2(n_list.get(i).getList(),context,show_fragment);
    holder.recyclerView.setAdapter(adapter2);

    holder.checkBox.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            boolean b = holder.checkBox.isChecked();
            n_list.get(i).IsSelect = b;
            for (int j = 0; j <n_list.get(i).getList().size() ; j++) {
               n_list.get(i).getList().get(j).ItemIsSelect = b;
            }
            face.setmycall(n_list);
        }
    });

    adapter2.setMyCallBackFace(new MyAdapter_Adapter2.MyCallBackFace() {
        @Override
        public void setmycall(List<NewsBean.DataBean.ListBean>list) {
            int s = 0;
            for (int j = 0; j <list.size() ; j++) {
                boolean itemIsSelect = list.get(j).ItemIsSelect;
                if (itemIsSelect){
                    s++;
                }
            }
            if (s == list.size()){
                holder.checkBox.setChecked(true);
                n_list.get(i).IsSelect = true;
            }else{
                holder.checkBox.setChecked(false);
                n_list.get(i).IsSelect = false;
            }
            face.setmycall(n_list);
        }
    });
}

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

public class holder extends RecyclerView.ViewHolder{
    CheckBox checkBox;
    TextView textView;
    RecyclerView recyclerView;
    public holder(@NonNull View itemView) {
        super(itemView);
        checkBox = itemView.findViewById(R.id.adapter1_CheckBox);
        textView = itemView.findViewById(R.id.adapter1_TextView);
        recyclerView = itemView.findViewById(R.id.adapter1_RecyclerView);
    }
}

public void setMyCallBackFace(MyCallBackFace face){
    this.face = face;
}

//创建一个接口
public interface MyCallBackFace{
    public void setmycall( List<NewsBean.DataBean> n_list);
}

}

	//adapter2

public class MyAdapter_Adapter2 extends RecyclerView.Adapter<MyAdapter_Adapter2.holer> {

List<NewsBean.DataBean.ListBean> n_list;
Context context;
Show_Fragment show_fragment;
private MyCallBackFace face;

public MyAdapter_Adapter2(List<NewsBean.DataBean.ListBean> n_list, Context context, Show_Fragment show_fragment) {
    this.n_list = n_list;
    this.context = context;
    this.show_fragment = show_fragment;
}

@NonNull
@Override
public holer onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    View view = LayoutInflater.from(context).inflate(R.layout.activity_adapter2,null);
    return new holer(view);
}

@Override
public void onBindViewHolder(@NonNull final holer holer, final int i) {
    holer.checkBox.setChecked(n_list.get(i).ItemIsSelect);
    holer.price.setText(n_list.get(i).getPrice()+"");
    holer.textView.setText(n_list.get(i).getTitle());
    Glide.with(context).load(n_list.get(i).getImages()).into(holer.imageView);

    holer.checkBox.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            boolean checked = holer.checkBox.isChecked();
            n_list.get(i).ItemIsSelect = checked;
            face.setmycall(n_list);
        }
    });

    holer.myview.setdata(n_list.get(i).getNum());

    holer.myview.setGetMyCALL(new Myview.GetMyCALL() {
        @Override
        public void setass(int nuss) {
            n_list.get(i).setNum(nuss);
            face.setmycall(n_list);
        }
    });


}

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

public class holer extends RecyclerView.ViewHolder{
    CheckBox checkBox;
    TextView textView , price;
    ImageView imageView;
    Myview myview;
    public holer(@NonNull View itemView) {
        super(itemView);
        //查找控件
        checkBox = itemView.findViewById(R.id.adapter2_checkbox);
        textView = itemView.findViewById(R.id.adapter2_text);
        price = itemView.findViewById(R.id.adapter2_price);
        imageView = itemView.findViewById(R.id.adapter2_ImageView);
        myview = itemView.findViewById(R.id.adapter1_Myview);
    }
}

public void setMyCallBackFace(MyCallBackFace face){
    this.face = face;
}

//创建一个接口
public interface MyCallBackFace{
    public void setmycall(List<NewsBean.DataBean.ListBean> n_list);
}

}

获取Winform窗体或Panel下包含的所有控件、根据控件名称获取指定控件 一、实现效果 在 Winform中窗体(Form)就像一个容器,可以包含所有的控件(比如:panel、button、textedit等控件);如果把窗体看做是 Winform 中最大的容器,那么Panel可以看做第二,Panel控件则是专门用于界面的排版布局,相当于 Web 开发中的层(div),几乎所有控件都可以包含到 Panel 中,包括窗体。 ①获取到指定窗体下的所有控件; ②获取到指定Panel下的所有控件; ③获取到窗体下的所有TextEdit类型控件; ④根据控件名称获取到该控.. 阅读详情

相关推荐

智能车轮腿组‘定点排雷’科目全解析:从雷区识别到姿态控制

本文深入解析了智能车竞赛轮腿穿越组‘定点排雷’科目的核心技术。从构建鲁棒的视觉识别系统,到融合编码器与IMU进行厘米级定位,再到实现框内高精度旋转的姿态控制,提供了一套完整的从感知到执行的闭环技术方案,助力参赛队伍攻克这一高难度科目。

weixin_29161719的博客 640

【QT】常用控件(概述、QWidget核心属性、按钮类控件、显示类控件、输入类控件、多元素控件、容器类控件、布局管理器)

QWidget 核心属性。

Elena's Blog 1万+

Allegro快速编辑丝印文字操作指导

选择setup-Application Mode-placement edit。Allegro支持丝印文字的编辑,下面介绍快速编辑丝印文字的两种方法如下。这个功能还支持拷贝粘贴,可以从其它地方拷贝过来,免去了书写的麻烦。出现text edit窗口,输入自己需要的文字,点击ok。鼠标移动到丝印文字位置,文字会被高亮起来。Allegro快速编辑丝印文字操作指导。点击丝印文字,丝印会被高亮起来。选择Text edit 命令。输入需要更改后的文字,如下。右击选择text edit。以编辑下方丝印文字为例。

weixin_54787054的博客 4193

C#——Windows应用程序常用控件

该控件的Maximum属性可以设置数值的最大值,如果输入的数值大于这个属性的值,则自动把数值改为设置的最大值。该控件的Minimum属性可以设置数值的最小值,如果输入的数值小于这个属性的值,则自动把数值改为设置的最小值。通过在控件的Click事件中判断控件的Checked属性的返回值是否为true,如果返回值是true,则控件被选中;在工具箱中单击要添加到窗体的空间,然后在该窗体上单击希望控件左上角所处的位置,然后拖拽到希望该控件右下角所处位置,控件即按指定的位置和大小添加到窗体中。

2401_86294292的博客 2171

使用DrissionPage和自动化技术实现得物鞋子信息爬取

本文介绍了一个基于DrissionPage技术的得物鞋子信息采集系统,能自动化采集商品图片、价格等数据并保存为Excel。系统采用浏览器模拟技术处理动态加载内容,通过XPath定位元素,实现智能交互和完整数据采集。关键技术包括:图片URL提取与下载、Excel数据集成与图片嵌入、文件名安全处理等。项目适用于市场分析和学术研究,强调必须遵守法律法规和平台规则,仅用于非商业用途。与API爬虫相比,浏览器自动化能更好处理现代Web应用,但需注意知识产权保护。

那些看似不起波澜的日复一日,会在某天让你看到坚持的意义 1666

基于FPGA的数字图像处理-直方图操作【3.3】

对于固定的位宽和图像分辨率来说,这个计算过程是 可定量的,也就是这个归一化系数是已知的。1.直方图累计和 根据数学定义,直方图累加和的定义是小于指定像素的所有像素 的统计值之和。在实际应用中,处理帧缓存是费时费力费资源的一件事情,在许 多情况下,图像的变换比较慢,在这种情况下的一个近似是当建立当 前帧的直方图统计结果时使用从前一帧得到的映射。由测试结果可见,这两幅过曝光和曝光不足的图像,经过均衡化 之后的效果图差别不大,对比度都非常高,设计代码达到了预期的均 衡目的。累加和的计算情况如图6-28所示。

qq_43416206的博客 1127

WPF的控件和内容模型

一、WPF 控件分类 ---- 控件是咋们的门面,控件有很多,但是仔细去分析,也是有规律可循的,根据其作用,我们可以把控件分类,我们可以把控件分类,日常工作中我们打交道最多的控件无外乎6类:布局控件、内容控件、带标题内容控件、条目控件、带标题条目控件、特殊内容控件。 1、布局控件:是可以容纳多个控件或者嵌套其他布局的控件,用于在UI上组织和 排列控件。Grid、StackPanel、DockPanel等控件都属此类,它们拥有共同的父 类为Panel。 2、内容控件:只能容纳一个控件或者布局控件作为他的内容。

weixin_49982941的博客 380

手把手教你学Simulink--单相逆变器模糊逻辑控制策略仿真

本文介绍了在Simulink中设计单相逆变器模糊逻辑控制策略的完整流程。主要包括:1)构建单相逆变器模型;2)使用FuzzyLogicToolbox设计模糊控制器,定义输入输出变量和模糊规则;3)将控制器集成到Simulink模型;4)添加干扰源和示波器;5)配置仿真参数并分析结果。该方法利用模糊控制处理非线性系统的优势,可实现输出电压的精确跟踪,具有良好的鲁棒性。文中提供了详细的步骤说明和示例代码,强调准确设计隶属函数和规则库对控制性能的关键作用。该仿真设计为电力电子控制系统的开发提供了有效支持。

MHD0815的博客 200

控件与组件的区别

在学习编程语言的过程中,往往会在参考材料的字里行间看到“组件”和“控件”这两个概念。它们之间到底有何区别? 组件(Component)比控件(Control)涵盖的范围要广,控件是组件的一种。 什么是组件?可以把它理解成一个可以反反复复使用的模块。就是说只要一个模块能够重用,它就可以称当上一个组件,而不用在乎这个模块有没有“外型”。 控件不仅是可以“重用”的模块,而且还有“外型”。平常看到的

btwsmile's blog 1万+

为什么我的 Spark Executor / Yarn Container 只有一个vCore?

在很多集群里,在关闭了Spark的DynamicAllocation的前提下(避免自动申请空闲资源,干扰测试结果),都会观察到:提交Spark作业时,申请 1 个 driver + n 个 executor 会在Yarn上会对应创建 n+1 个 container,但是每个container只有一个vCore,通过--driver-cores和--executor-cores设定的vCore数都未奏效。有人会因此错误的认为Yarn上的一个vCore对应一个Spark的executor,这是非常错误的,正确的

Laurence的技术博客 916

使用PyTorch和TextCNN实现英文长文本诗歌文本分类

在这个过程中,我们了解了如何进行文本数据预处理、构建TextCNN模型,并进行训练与评估。首先,我们需要将文本文件加载到内存中,并将每个诗歌作为一个样本。然后,我们需要将每个样本转换为数字表示,这可以通过将词汇表中的每个词语映射到一个唯一的整数来实现。此外,我们还需要将每个样本的长度统一为固定值,以便于模型输入。通过这个示例,我们可以学习如何构建一个简单但有效的文本分类模型,并在具体的应用场景中进行训练和预测。该模型通过使用多个不同尺寸的卷积核来捕捉文本中的不同长度的信息,并通过最大池化操作提取关键特征。

loop_syntax648的博客 254

VB常用控件介绍

目录 1、窗体(Form) 2、Label(标签)控件 3、TextBox(文本框)控件 4、RichTextBox控件 5、NumericUpDown控件 6、Button(按钮)控件 7、GroupBox(分组框)控件 8、RadioButton(单选按钮)控件 9、CheckBox(复选框)控件 10、ListBox(列表框)控件 11、ComboBox(组合框)控...

咖喱米饭丶 1万+

基于网关实现不同网段S7-1200 CPU的通信方法

在A网段的计算机上ping B网段的计算机:在A网段的计算机上使用ping命令,向B网段的计算机发送数据包。在B网段的计算机上ping A网段的计算机:同样地,在B网段的计算机上使用ping命令,向A网段的计算机发送数据包。数据包也会经过路由器进行转发,最终到达A网段的计算机。配置路由器:在路由器上配置两个网段的IP地址和子网掩码,并设置路由表,使得路由器可以将A网段和B网段之间的数据进行转发。确定两个网络之间的路由器:假设需要将A网段和B网段进行通信,需要在A、B两个网段之间设置一台路由器。

电工 2400

Qt——Qt 开发中所涉及的所有控件(基本控件、容器控件、布局控件、高级控件、其他控件、多媒体控件、定制控件)

Qt开发中提供了许多控件(Widgets)供开发者使用,用于构建图形用户界面(GUI)应用程序。

qq_57737603的博客 3862

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

C# 获取指定页面所有的控件及嵌套控件

百度了很多方法都无法正确解析出多层嵌套的xml文件,网上很多方法都仅适用于单层解析。于是参考了网上的方法并进行改进,具体方法如下:

weixin_48858524的博客 2992

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

DuiLib中的list控件以及ListContainerElement控件

在 Duilib 中,List 控件用于显示一个垂直滚动的列表,而 ListContainerElement 控件则用于作为 List 控件中的每个元素。下面是它们的基本使用方法。

森明帮大于黑虎帮的博客 3397

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

TabControl控件、菜单控件、ComboBox控件

TabControl,即选项卡控件,是由System.Windows.Forms.TabControl类提供的,主要用于将相关的组件组合到一系列选项卡页面上,TabControl控件管理TabPages集合。2、从工具栏拖动2个GroupBox控件、2个Button控件、1个TabControl控件。单击"选项一按钮",显示选项卡“tabPage1”,索引为0。单击"选项二按钮",显示选项卡“tabPage1”,索引为1。

2201_76007015的博客 2152

Qt控件介绍(输入类控件、显示类控件、控件容器)

一、输入类控件 QLineEdit ​ 单选文本框,主要用来从界面获取数据,常用于获取用户名密码。 ​ 常用设置: ​ 字体字号设置 ​ 垂直、水平对齐设置 ​ 只读设置 ​ 输入模式: ​ Normal 正常模式 ​ NoEcho 不显示输入的内容 ​ PassWord 以 *代码输入的内容 ​ PassWordEchoOnEdit

xiaoqiudao的博客 3901

Label控件、Button控件和TextBox控件的知识总结

Label 在默认设置的情况下,控件会根据文字的内容自动调整控件的大小。但是必须设置AutoSize的属性设置为false才可以实现多行显示,就可以实现自己随意调整控件的大小。

2301_78474749的博客 4443

QT控件:【控件概述】【QWidget核心体系】【按钮类控件】【显示类控件】

Widget 是 Qt 中的核心概念。英文原义是 "小部件",我们此处也把它翻译为 "控件"。控件是构成一个图形化界面的基本要素。像上述示例中的,按钮、列表视图、树形视图、单行输入框、多行输入框、滚动条、下拉框等,都可以称为 “控件”。Qt 作为一个成熟的 GUI 开发框架,内置了大量的常用控件。这一点在 Qt Designer 中就可以看到端倪。并且 Qt 也提供了 “自定义控件” 的能力,可以让程序员在现有控件不能满足需求的时候,对现有控件做出扩展,或者手动开发出新的控件。这些全是控件。

2301_81699364的博客 928

flex控件总结

Flex基本控件总结 一、flex控件的分类:文本控件(text controls)、数据源控件(data provider controls)、菜单控件       (menu  controls)、按钮控件(button controls)、Flex控件(flex controls)、容器控件。 二、 文本控件 a)         标签(Label):标签:&lt;mx:Label/&...

xiao190128的专栏 3058

QTableWidget添加控件获取控件

1.添加控件 ui->tableWidget->setCellWidget(int row,int column,QWidget*); 在行row,列column处添加QWidget控件 eg: QComboBox *combox = new QComboBox; ui->tableWidget->setCellWidget(0,0,combox); 在0,0处添加combox控件 2.获取控件 QWidget *widget = ui->tableWid.

枫影竹韵的博客 5502

MFC控件的使用方法(六-十(组合框控件,单选控件,静态文本控件,图片控件,滚动条控件))

六、组合框控件(Group Box) 作用:组合框控件的作用就是将MFC中的控件标识为一组控件来使用:只能选择其中的一个控件(如性别选择,当选择男时,女不被选择;当选择女时男不被选择)。 消息映射函数: 无 使用方法: 1、设置组合框的属性Group,将组合框的Group属性设置为TRUE,将组合框中其他的控件的Group属性设置为FALSE。 2、获取组合框选中的元素。(GetChecedRadioButton) 3、设置组合框需要选中的元素(( CButton *)GetDlgItem(IDC_GG )

qq_43812868的博客 974

如何获取qt控件的子控件

如何获取qt控件的子控件 我们知道,所有的qt控件都继承自QObject,而QObject有一个属性叫做objectName。我们可以利用这个属性。 查找对象的方法,可以利用findChild()和fildChildren()。函数原型如下: T QObject::findChild(const QString &name = QString(), Qt::FindChildOptions options = Qt::FindChildrenRecursively) const QList QObj

null_plus的博客 1844
上一篇: 登录展示
下一篇: app导入数据库
Mr___Z
博客等级 码龄8年 0粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值