在多个活动中更改TextView字符串资源

时间:2018-04-19 23:50:36

标签: android

我的应用程序中的不同活动中有一堆TextView,显示了一些字符串。

我想在某个地方添加一个选项,如果你检查它(或按它,无论如何),那些文本视图将使用其他字符串。

我虽然可以使用第二个res值字符串,但应用程序将在两者之间切换。但我看到这些是用于本地化而不使用任何用户输入。

2 个答案:

答案 0 :(得分:0)

Your requirement seems like you need DataBinding. You can create a Model call lets say StringManager

public class StringManager {
    private final String str;
    private final String str2;
    private final String str3;
    public StringManager(String str1,String str2, String str3){
        //Initialize all class variables here
    }
    //Create getter methods for all
}

In your main_activity.xml

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
   <data>
       <variable name="stringManager " type="com.example.StringManager "/>
   </data>
   <LinearLayout
       android:orientation="vertical"
       android:layout_width="match_parent"
       android:layout_height="match_parent">
       <TextView android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:text="@{stringManager.str1}"/>
       <TextView android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:text="@{stringManager.str2}"/>
       <TextView android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:text="@{stringManager.str3}"/>
       <Button
           android:id="@+id/btnClickMe"
           android:text="Click me"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:onClick="clicked"/>
   </LinearLayout>
</layout>

In your MainActivity.java

  public class MainActivity extends AppCompatActivity{
        private MainActivityBinding binding;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);   
           binding = DataBindingUtil.setContentView(this, R.layout.main_activity);
           StringManager stringManager = new StringManager("strA", "StrB", "StrC");
           binding.setStringManager(stringManager);
        }

        public void clicked(View v){
           StringManager stringManager = new StringManager("strD", "StrE", "StrF");
           binding.setStringManager(stringManager);
        }
    }

You can find the official tutorial here.

答案 1 :(得分:0)

由于答案中没有特定的代码,我将把我的解决方案简化为伪代码。

此解决方案基于onResume回调,一旦活动处于活动状态并且SharedPreferences类,就会调用该回调。同样重要的是要知道一次只能激活一项活动。

  1. 使用默认字符串资源
  2. 将变量初始化为SharedPreference
  3. 用户输入更改存储为的精确变量 SharedPreference代替TextView的文字本身。 SharedPreference的性质将使每个活动中的每个按钮都引用相同的变量。第二个字符串资源可以在这里用作源。
  4. TextView的文字仅使用SharedReference变量进行更新。
    • 如果新活动变为活动状态onCreate可以使用TextView变量来更新SharedReference的文字。
    • 如果其他已初始化的活动变为有效onResume,则可以使用TextView变量
    • 来更新SharedPreference的文字