Android风味 – 在R文件中找不到符号变量

Android风味 – 在R文件中找不到符号变量,第1张

概述我有两种口味 – paidapp和freeapp. 唯一的区别是,paidapp在MainActivity上还有一个按钮,比如说“付费按钮”. paidapp有自己的布局,按钮 android:id =“@ id / paidbutton”,freeapp的布局没有这个按钮. 在代码我用这个: if (BuildConfig.FLAVOR.equals("paidapp")) { 我有两种口味 – paIDapp和freeapp.
唯一的区别是,paIDapp在MainActivity上还有一个按钮,比如说“付费按钮”.
paIDapp有自己的布局,按钮 android:ID =“@ ID / paIDbutton”,freeapp的布局没有这个按钮.

在代码我用这个:

if (BuildConfig.FLAVOR.equals("paIDapp")) {            VIEw paIDbutton = findVIEwByID(R.ID.paIDbutton);            paIDbutton.setonClickListener(new OnClickListener() {                @OverrIDe                public voID onClick(VIEw v) {                    //...                }            });}

但我有一个错误找不到findVIEwByID(R.ID.paIDbutton)中的符号变量;

如何在不克隆MainActivity.java的情况下解决这个问题?

EDIT1 – 添加更多代码示例:

摇篮:

productFlavors {    paIDapp {    }    freeapp {    }}

/app/src/main/res/layout/activity_main.xml

<?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="match_parent">    <button        androID:ID="@+ID/goNext"        androID:layout_wIDth="wrap_content"        androID:layout_height="wrap_content"        androID:text="Go next" /></linearLayout>

/app/src/paIDapp/res/layout/activity_main.xml

<?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="match_parent">    <button        androID:ID="@+ID/goNext"        androID:layout_wIDth="wrap_content"        androID:layout_height="wrap_content"        androID:text="Go next" />    <button        androID:ID="@+ID/paIDbutton"        androID:layout_wIDth="wrap_content"        androID:layout_height="wrap_content"        androID:text="See more" /></linearLayout>

/app/src/main/java/company/com/myapplication/MainActivity.java

package company.com.myapplication;import androID.app.Activity;import androID.os.Bundle;import androID.vIEw.VIEw;import androID.Widget.Toast;public class MainActivity extends Activity {    @OverrIDe    protected voID onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentVIEw(R.layout.activity_main);        VIEw goNext = findVIEwByID(R.ID.goNext);        goNext.setonClickListener(new VIEw.OnClickListener() {            @OverrIDe            public voID onClick(VIEw v) {                Toast.makeText(MainActivity.this,"goNext click",Toast.LENGTH_SHORT).show();            }        });        if (BuildConfig.FLAVOR.equals("paIDapp")) {            VIEw paIDbutton = findVIEwByID(R.ID.paIDbutton);            paIDbutton.setonClickListener(new VIEw.OnClickListener() {                @OverrIDe                public voID onClick(VIEw v) {                    Toast.makeText(MainActivity.this,"paIDapp click",Toast.LENGTH_SHORT).show();                }            });        }    }}

EDIT2 – 我找到了一些使用反射的解决方法,但仍在寻找正常的解决方案:

而不是VIEw paIDbutton = findVIEwByID(R.ID.paIDbutton);我用过VIEw paIDbutton = findVIEwByID(getIDFromrID(“paIDbutton”));

其中getIDFromrID是:

private int getIDFromrID(String IDname) {    int ID = 0;    try {        Class c = R.ID.class;        FIEld fIEld = c.getFIEld(IDname);        ID = fIEld.getInt(null);    } catch (Exception e) {        // do nothing    }    return ID;}
解决方法 如果你在freeapp产品风格中根本没有paybutton布局元素,你可以在freeapp product flavor文件夹中的一个资源xml文件中声明相应的ID项.例如,创建包含以下内容的文件src / freeapp / res / values / IDs.xml:
<?xml version="1.0" enCoding="utf-8"?><resources>    <item name="paIDbutton" type="ID"/></resources>

在执行此 *** 作之后,编译公共代码没有任何问题,因为将为两种产品风格定义符号R.ID.paIDbutton. findVIEwByID()调用将返回paIDapp构建中的真实布局元素,并将在freeapp构建中返回null.

总结

以上是内存溢出为你收集整理的Android风味 – 在R文件中找不到符号变量全部内容,希望文章能够帮你解决Android风味 – 在R文件中找不到符号变量所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1137507.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存