为什么在Library中无法使用switch-case来实现点击事件的判定??

最近一直在在接触组件化工程,项目中将每个模块都独立出来,然后Module中的application对这些组件Library做些依赖,然后组装在一起,就成了一个大型的工程了,废话不多说,今天直接进入主题,

首先,我们先新建一个工程,然后在其中activity_main.xml写下如下代码:
<?xml version="1.0" encoding="utf-8"?>
<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:gravity="center_horizontal"
    android:orientation="vertical"
    tools:context="com.leezp.xingyun.noswitch.MainActivity">

    <TextView
        android:id="@+id/app_activity_main_btn1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:text="点我啊——1"
        android:textSize="20sp"/>

    <TextView
        android:id="@+id/app_activity_main_btn2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:text="点我啊——2"
        android:textSize="20sp"/>

    <TextView
        android:id="@+id/app_activity_main_btn3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:text="点我啊——3"
        android:textSize="20sp"/>

    <TextView
        android:id="@+id/app_activity_main_btn4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:text="点我啊——4"
        android:textSize="20sp"/>

    <TextView
        android:id="@+id/app_activity_main_btn5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:text="点我啊——5"
        android:textSize="20sp"/>

</LinearLayout>
然后在MainActivity.java中写入如下代码:
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initView();
    }

    private void initView() {
        btn_1 = (TextView) findViewById(R.id.app_activity_main_btn1);
        btn_2 = (TextView) findViewById(R.id.app_activity_main_btn2);
        btn_3 = (TextView) findViewById(R.id.app_activity_main_btn3);
        btn_4 = (TextView) findViewById(R.id.app_activity_main_btn4);
        btn_5 = (TextView) findViewById(R.id.app_activity_main_btn5);

        btn_1.setOnClickListener(this);
        btn_2.setOnClickListener(this);
        btn_3.setOnClickListener(this);
        btn_4.setOnClickListener(this);
        btn_5.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.app_activity_main_btn1:
                Log.e(TAG, "onClick: "+"你点了我,妍");
                break;
            case R.id.app_activity_main_btn2:
                Log.e(TAG, "onClick: "+"你点了我,妍妍");
                break;
            case R.id.app_activity_main_btn3:
                Log.e(TAG, "onClick: "+"你点了我,妍妍妍");
                break;
            case R.id.app_activity_main_btn4:
                Log.e(TAG, "onClick: "+"你点了我,妍妍妍妍");
                break;
            case R.id.app_activity_main_btn5:
                Log.e(TAG, "onClick: "+"你点了我,妍妍妍妍妍");
                break;
            default:
                Log.e(TAG, "onClick: "+"你点错了,那不是我!");
        }
    }
你会发现,尽然没错,对,他就没错,因为他是application,而不是library,然后我们新建一个Module,做上面一样的操作

步骤1

步骤2

剩余步骤省略…………,毕竟他和application的创建差不多,module创建了,他依旧是application,我们需要将其设置为library

第一步,先library中的build.gradle的第一句代码由apply plugin: 'com.android.application'改为apply plugin: 'com.android.library'

第二步,将其中有句applicationId "xxx.xx.xx.xxx"给删除掉,然后给app的module添加library库依赖,重新build,就可以了

当你在library中重复application的操作时,然后你会发现他竟然出错了

具体报如下错:

什么原因呢???我们看一看就知道,将app的R.java文件与library的R.java文件作对比

app的R.java文件

library的R.java文件

原来其中存在一个final字段,app的R.java文件因为是application的原因,所以就生成的R文件是常量,而switch中的case判断条件要是常量,所以在library中不能使用switch来判断,因为他生成的R文件不是常量属性!所以在library中要使用if-else的方式对其进行点击事件的具体化

android-studio解释:https://sites.google.com/a/android.com/tools/tips/non-constant-fields

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值