如何从其他活动更改主xml文件?

时间:2017-03-14 21:24:16

标签: java android android-studio

我是Java的新手。我正在做一个学校项目,我有我的主要活动,然后我有一个设置活动。我试图通过设置活动修改主活动中的xml。我可以使用settings.java修改设置xml文件,但我想用settings.java修改主要活动xml

public class Settings extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_settings);


    // Get the Intent that started this activity and extract the string

    Switch switchButton;
    final RelativeLayout mRelativeLayout = (RelativeLayout) findViewById(R.id.activity_settings);
    final RelativeLayout mRelativeLayoutMain = (RelativeLayout) findViewById(R.id.activity_main);

    switchButton = (Switch) findViewById(R.id.switch1);
    switchButton.setChecked(true);
    switchButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton compoundButton, boolean bChecked) {
            if (bChecked) {
                mRelativeLayoutMain.setBackgroundColor(Color.GRAY);
                mRelativeLayout.setBackgroundColor(Color.GRAY);
            } else {
                mRelativeLayoutMain.setBackgroundColor(Color.WHITE);
                mRelativeLayout.setBackgroundColor(Color.WHITE);
            }
        }
    });

    if (switchButton.isChecked()) {
        mRelativeLayoutMain.setBackgroundColor(Color.GRAY);
        mRelativeLayout.setBackgroundColor(Color.GRAY);
    } else {
        mRelativeLayoutMain.setBackgroundColor(Color.WHITE);
        mRelativeLayout.setBackgroundColor(Color.WHITE);
    }}


public void toast1(View view) {
    android.widget.Toast.makeText(this, "Created by Cody Walls and Tommy Serfas", android.widget.Toast.LENGTH_LONG).show();
}

/*public void switch1(View view) {
    ScrollView mScrollView = (ScrollView) findViewById(R.id.scrollView);
    mScrollView.setBackgroundColor(Color.GRAY);
}*/



 }

在Code中我试图改变主要活动xml的背景:  mRelativeLayoutMain.setBackgroundColor(Color.GRAY); 当我运行应用程序并单击意图时,它将崩溃并显示错误:

  

" java.lang.NullPointerException:尝试调用虚方法   ' void android.widget.RelativeLayout.setBackgroundColor(int)'在null   对象参考"

2 个答案:

答案 0 :(得分:1)

我认为最简单的方法是创建 PreferenceManager.SharedPreferences ,我建议您存储当前的应用数据。这将帮助您在退出应用程序后不会丢失应用程序中的任何更改。这是简短的说明:

  1. 在设置活动中创建按钮,该按钮将更改主要活动中的内容。
  2. 为您的按钮创建onClickListener。
  3. 使用 .SharedPreferences 来存储您是否点击了按钮。 (我建议存储布尔变量,这样你可以存储点击按钮的方式。)
  4. 我在onCreate方法中的两个活动都会调用 .getSharedPreferences 来读取已保存的应用值。 (我的意思是阅读是否点击了按钮。)
  5. 使用从 4。获得的应用值来更改活动中的任何元素。 (例如,如果您单击存储该按钮,则更改一些TextView文本等。)
  6. 我希望你理解这个想法。

    Link to the Android developer tutorial about App key values storing & saving

    Link to the StackOverflow much easier explanation & examples

答案 1 :(得分:0)

有两种方法可以做到这一点(其中一些方法取决于你如何在每个活动中来回切换)。这还取决于你正在改变什么。

在您的设置页面中,当您更改不同的设置时,您将在Preferences内保存此内容。 (您可以在此处查看更多如何使用“偏好设置”:https://examples.javacodegeeks.com/android/core/ui/settings/android-settings-example/或仅使用Google搜索)。

关于你的主要活动,取决于你回到它的方式(最有可能是onStart),你可以以编程方式设置你需要的东西。

因此,您可能需要对Android生命周期以及每个周期的工作方式(https://developer.android.com/guide/components/activities/activity-lifecycle.html)进行一些研究,如何通过Java(http://startandroid.ru/en/lessons/220-lesson-16-creating-layout-programmatically-layoutparams.html)以编程方式对UI进行编程,以及{{ 1}} Android库保存某些设置。

xml并不意味着“改变”。您可以以编程方式更改UI。可以在没有任何xml的情况下构建Android应用程序。首次构建Android时,它没有使用xml来创建UI。这一切都是通过Java完成的。然后添加它以使用xml来创建活动或片段或任何UI组件。这使得动态内容非常少的静态活动或活动变得更容易。