为了账号安全,请及时绑定邮箱和手机立即绑定

从 Android 中的 XML 布局获取视图不起作用

从 Android 中的 XML 布局获取视图不起作用

慕无忌1623718 2021-12-01 19:25:42
我有一个关于如何从 Android 中的 XML 布局获取视图的问题?我正在使用微调器,它现在可以保存选定的微调器值。我想从 content_doa.xml 布局中获取 ID 为 titleTextView 的 TextView 视图。我试过使用 LayoutInflater 但它不起作用,它还没有产生任何效果。你能帮我解决问题吗?干得好:字体设置.javapublic class FontSettings extends AppCompatActivity {private Spinner spinner1, spinnerLatin;private SharedPreferences mMyPrefs;private SharedPreferences.Editor mMyEdit;@Overridepublic void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.settings_font);    // toolbar    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);    setSupportActionBar(toolbar);    getSupportActionBar().setDisplayHomeAsUpEnabled(true); //this line shows back button    //Display data size teks arab in dropdown list spinner    final Spinner spinnerBackgroundChange = (Spinner)findViewById(R.id.spinner1);    final LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);    final SharedPreferences sharedPref = getSharedPreferences("My_Prefs", 6);    ArrayAdapter<CharSequence> spinnerArrayAdapter = ArrayAdapter.createFromResource(this, R.array.country_arrays, android.R.layout.simple_spinner_item);    spinnerArrayAdapter.setDropDownViewResource(R.layout.textview_with_background);    spinnerBackgroundChange.setAdapter(spinnerArrayAdapter);    spinnerBackgroundChange.setSelection(sharedPref.getInt("VALUE", 6));
查看完整描述

2 回答

?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

好的,所以我现在知道了。您的资源中有一个数组列表,用于填充微调器。单击该项目时,代码将获取该项目在数组列表中的位置,并将其设置在共享首选项中,然后在 ActivityContent.java 中进行访问。


在 ActivityContent.java 中,您从共享首选项中获得的价值是项目在数组列表中的位置。


首先只是为了帮助您学习,我将解释您可以用它做什么。其次,我将解释你打算做什么。


第一的

您在 arraylist 中有 item 的位置,因此您可以在 ActivityContent.java 类中使用它来做什么,请执行此操作。


活动内容.java


String[] stringArray = getResources().getStringArray(R.array.country_arrays)

SharedPreferences sp = getSharedPreferences("My_Prefs", Activity.MODE_PRIVATE); 

int sizeItemSelected= sp.getInt("VALUE", 24);


//if array contains strings if not just make this variable an Int

String sizeToSetTextViewSizeTo = stringArray[sizeItemSelected];

int tvSize = Integer.parseInt(sizeToSetTextViewSizeTo);



TextView titleTV = (TextView) findViewById(R.id.titleTextView);

titleTV.setTextSize(tvSize);

第二

您只需传递所选项目(您希望在活动内容中将 textview 设置为的大小)而不是传递位置。


我认为您最初打算使用代码做什么


case 1:

SharedPreferences.Editor editor1 = sharedPref.edit();

editor1.putInt("VALUE", spinnerBackgroundChange.getSelectedItem());                   

editor1.commit();

break;

而不是这个


case 1:

SharedPreferences.Editor editor1 = sharedPref.edit();

editor1.putInt("VALUE", spinnerBackgroundChange.getSelectedItemPosition());                   

editor1.commit();

break;

唯一的事情是我从来没有见过这样的案例:在它自己的内部


OnItemSelectedListender()

正如你所拥有的。但我不明白为什么这会影响代码的第一个或第二个选项。


查看完整回答
反对 回复 2021-12-01
?
aluckdog

TA贡献1847条经验 获得超7个赞

更新了解决问题的链接 抱歉没有代码。我回家后可以添加几行,但最好的选择是第 3 行,这是您需要研究和玩的东西。


您不能直接与来自另一个活动的视图交互。该活动布局并未膨胀,因此您最终只会出现空指针异常。你必须间接地这样做。有 3 种方法可以立即做到这一点。


SharedPreferences 像您一样在您的微调器的共享首选项中设置一个值。但是在您的 activitycontent.java 中,您可以获取共享首选项并查看某个值是否位于某个键值对中。如果是这样,则在 activitycontent.java 中将文本大小设置为该值。如果它为 null 或空,那么它将是您为它设置的 contentdoa.xml 值的值。这将是最简单的,因为您不需要为数据库编写顶级代码,也不必完全重新编写整个应用程序

活动内容.java


将此添加到 onCreate


SharedPreferences sp = getSharedPreferences("My_Prefs", Activity.MODE_PRIVATE); 

 int titleTextSize = sp.getInt("VALUE", 24);

TextView titleTV = (TextView) findViewById(R.id.titleTextView);

titleTV.setTextSize(titleTextSize);

以编程方式设置 TextViewSize


看看那篇文章并通读答案和评论。您还可以尝试的另一件事是将 Id 添加到线性布局,然后先引用它,然后再引用类似的内容。


linearLayout.findViewById..... you know how the rest goes

创建一个 SQLite 数据库并将您的值存储在其中。对于您的所有修改以及在每个活动中可以更改的任何内容,您都有该视图活动检查是否设置了值,如果设置了视图 textSize 为该值。我会推荐更多,因为你有很多可以改变的东西。

我更推荐的是研究并使用它进行应用程序设置。 应用程序设置的默认 SharedPrefences


查看完整回答
反对 回复 2021-12-01
  • 2 回答
  • 0 关注
  • 159 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信