猿问

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

我有一个关于如何从 Android 中的 XML 布局获取视图的问题?我正在使用微调器,它现在可以保存选定的微调器值。我想从 content_doa.xml 布局中获取 ID 为 titleTextView 的 TextView 视图。我试过使用 LayoutInflater 但它不起作用,它还没有产生任何效果。你能帮我解决问题吗?


干得好:


字体设置.java


public class FontSettings extends AppCompatActivity {


private Spinner spinner1, spinnerLatin;

private SharedPreferences mMyPrefs;

private SharedPreferences.Editor mMyEdit;


@Override

public 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));


慕无忌1623718
浏览 160回答 2
2回答

慕田峪4524236

好的,所以我现在知道了。您的资源中有一个数组列表,用于填充微调器。单击该项目时,代码将获取该项目在数组列表中的位置,并将其设置在共享首选项中,然后在 ActivityContent.java 中进行访问。在 ActivityContent.java 中,您从共享首选项中获得的价值是项目在数组列表中的位置。首先只是为了帮助您学习,我将解释您可以用它做什么。其次,我将解释你打算做什么。第一的您在 arraylist 中有 item 的位置,因此您可以在 ActivityContent.java 类中使用它来做什么,请执行此操作。活动内容.javaString[] stringArray = getResources().getStringArray(R.array.country_arrays)SharedPreferences sp = getSharedPreferences("My_Prefs", Activity.MODE_PRIVATE);&nbsp;int sizeItemSelected= sp.getInt("VALUE", 24);//if array contains strings if not just make this variable an IntString 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());&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;editor1.commit();break;而不是这个case 1:SharedPreferences.Editor editor1 = sharedPref.edit();editor1.putInt("VALUE", spinnerBackgroundChange.getSelectedItemPosition());&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;editor1.commit();break;唯一的事情是我从来没有见过这样的案例:在它自己的内部OnItemSelectedListender()正如你所拥有的。但我不明白为什么这会影响代码的第一个或第二个选项。

aluckdog

更新了解决问题的链接 抱歉没有代码。我回家后可以添加几行,但最好的选择是第 3 行,这是您需要研究和玩的东西。您不能直接与来自另一个活动的视图交互。该活动布局并未膨胀,因此您最终只会出现空指针异常。你必须间接地这样做。有 3 种方法可以立即做到这一点。SharedPreferences 像您一样在您的微调器的共享首选项中设置一个值。但是在您的 activitycontent.java 中,您可以获取共享首选项并查看某个值是否位于某个键值对中。如果是这样,则在 activitycontent.java 中将文本大小设置为该值。如果它为 null 或空,那么它将是您为它设置的 contentdoa.xml 值的值。这将是最简单的,因为您不需要为数据库编写顶级代码,也不必完全重新编写整个应用程序活动内容.java将此添加到 onCreateSharedPreferences sp = getSharedPreferences("My_Prefs", Activity.MODE_PRIVATE);&nbsp;&nbsp;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
随时随地看视频慕课网APP

相关分类

Java
我要回答