如何从另一个活动访问活动资源?

时间:2018-04-26 00:41:22

标签: android

我想更改textView(在mainActivity中)的属性,如textSize或textColor。

然后我尝试在设置活动中使用它。

View view = getLayoutInflater().inflate(R.layout.activity_main, null);
readTextView = view.findViewById(R.id.textView);

它不起作用。

另外,我试着How to update a TextView of an activity from another class这个答案。但是不是它只能改变文字吗?如果我需要更改多少属性,我必须在我的活动中创建一个方法。

2 个答案:

答案 0 :(得分:0)

Android access main activity variables from another class

我引用了这个答案。

  1. 声明public static您要更改的资源。
  2. 设置活动中使用[Your Activity].[The Resource]
  3. 我真的很抱歉这样问...抱歉。

答案 1 :(得分:0)

由于以下原因,您不得使用公共变量作为在活动中更新View的机制:

  • 您无法确保活动始终存在。由于错误或您正在完成活动,系统很可能会被系统杀死。

  • 您将自己的活动与其他课程联系起来。因此,每次您更改活动时,您的更改都有可能传播到另一个类。这可能会为多个类引入错误。

通过仅将视图作为参数发送,您最好从另一个类严格访问View。例如,如果您有以下活动:

public class YourActivity extends AppCompatActivity {
  private TextView mTvName;

  ...
} 

要更改mTvName的属性,您需要创建以下内容:

public class TextChanger {
  public static void maximizeTextSize(TextView tv) {
    tv.setTextSize(30);
  }
}

然后你可以在你的Activity中使用它:

TextChanger.maximizeTextSize(mTvName);

如果要从另一个Activity更新TextView,可以使用startActivityForResult启动另一个Activity。然后,您需要通过覆盖活动中的onActivityResult来接收结果以更改TextView。

如果您需要更新TextView而不与其他类或Activity进行任何耦合,则可以使用Event Bus机制。您可以使用EventBus库。

相关问题