您的位置:首页 > 其它

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

2017-08-10 12:00 609 查看
最近一直在在接触组件化工程,项目中将每个模块都独立出来,然后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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐