【问题标题】:How to use a property view of a layout in another view in java code?java - 如何在Java代码的另一个视图中使用布局的属性视图?
【发布时间】:2021-01-30 18:37:00
【问题描述】:

我有 2 个活动(“Mainactivity”和“NumbersActivity”)和 2 个布局(“activity_main.xml”和“activity_numbers.xml”)。 在“activity_main.xml”中有一个“textview1”(通过 id:textview1_id)”,在“activity_numbers.xml”中有一个“textview2”(通过 id:textview2_id)。 我使用 API 16。 在“NumbersActivity”中,下面的代码没有响应:

[codes are write in NumbersActivity]
TextView textView1 = (TextView)findViewById(R.id.textview1_id);
ColorDrawable cd = (ColorDrawable) textView1.getBackground();
int colorId = cd.getColor();
textView2.setBackgroundColor(colorId);

但不起作用。 如何从 textview1 获取和设置 textview2 的颜色?

【问题讨论】:

    标签: android android-studio layout view


    【解决方案1】:

    您无法访问未在当前活动已膨胀的布局文件中声明的视图。

    在您的示例中,只有MainActivity 可以找到R.id.textview1_id,因为很可能已经使用setContentView(R.layout.activity_main) 扩大了该视图所在的布局。

    因此,当从NumbersActivity 膨胀activity_numbers.xml 布局时,它不包括textview1_id。它只能找到在该 XML 文件中声明的视图,在这种情况下,就是 ID 为 textview2_id 的视图。

    您的解决方案是在activity_numbers.xml 中声明textview1,如果您需要的话。

    【讨论】:

    • 问题是你提到的,那么当当前活动是 NumbersActivity 时如何去参考 textview1_id ?
    • 您需要在NumbersActivity 布局中声明textview1_id。但请记住,这将是一个新的 textview 实例,而不是另一个活动 (MainActivity) 中存在的实例。另一种解决方案可能是使用 Fragments,虽然我猜这不是一个好的做法,但更容易跨活动和 Fragment 访问已经膨胀的视图。
    • 谢谢,但也许有解决办法。
    【解决方案2】:

    你可以这样做: 在 MainActivity 里面创建这个方法

    SharedPreferences sharedPref = 
     MainActivity.getPreferences(Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPref.edit();
    editor.putInt(cd.getColor(), "colorID");
    editor.apply();
    

    在您的 NumberActivity 中,您可以这样做:

         SharedPreferences sharedPref = NumberActivity.getSharedPreferences(
        getInt(colorId, Context.MODE_PRIVATE);
    

    【讨论】:

    • 对不起,我忘记了 changecolor 方法里面的 Return
    • 实际上我在您的代码中进行了这样的更正: public int changeColorInFirstActivity(){ TextView textView1 = (TextView)findViewById(R.id.NumbersId); ColorDrawable cd = (ColorDrawable) textView1.getBackground(); int colorId = cd.getColor();返回颜色标识; } 但仍然无法正常工作
    • 在您的代码中进行所有更正并使用它之后,无法正常工作
    • 好的,那么您可以使用 SharedPreferences 来保存 colorId,并在您的 NumberAcitivty 中获取它
    猜你喜欢
    • 2014-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多