Android findViewById 在主 Activity 以外的类中使用时返回 null

标签 android

我试图在我的监听器类中通过 ID 获取一个 TextView,该类处理微调器的 onItemSelected 事件。在我的主要 Activity 中,我可以调用 findViewById(R.id.textView1) 并且它工作正常。但是,如果我在微调器监听器类中调用相同的函数,它总是返回 null 并强制关闭应用程序。

有人知道为什么 findViewById 在我的主 Activity 中有效,但在我的监听器类中无效吗?

这是我主要 Activity 的代码。单击按钮时调用:

public void something ()
{
    setContentView(R.layout.spinnerLayout);

    Spinner spinner = (Spinner) findViewById(R.id.mySpinner);
    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
            this, R.array.spinner_array, android.R.layout.simple_spinner_item);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner.setAdapter(adapter);

    spinner.setOnItemSelectedListener(new MyOnItemSelectedListener());

}

这是 MyOnItemSelectedListener 的代码:

public class MyOnItemSelectedListener implements OnItemSelectedListener 
{

    public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) 
    {               
        TextView tv = view.findViewById(R.id.myTextView);
        // I want to set the text of this text view to the value selected using the spinner
        tv.setText("Something");
    }

    public void onNothingSelected(AdapterView parent) {
      // Do nothing.
    }
}

我需要做什么才能获得“TextView tv = view.findViewById(R.id.myTextView);”上类?

谢谢!!!

最佳答案

为了使 findViewById 起作用,您必须之前调用过 setContentView

关于Android findViewById 在主 Activity 以外的类中使用时返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5222294/

相关文章:

android - 如何使用android sdk更改mapbox语言

android - 在android中创建一个具有外键作为表列的sqlite数据库表。我面临以下错误。我该如何解决这个问题

android - 带 Android Canvas 的圆角矩形

android - 将数据传递给 PageKeyedDataSource

android - 如何防止LRU缓存android中的内存不足错误

javascript - 将数据从 XWalkView 传递到原生 Android

android - 计算可绘制文件夹中以特定字符串开头的项目

android - 配置 Gradle 以在开始编译之前执行自定义构建步骤

android - Android 是如何管理内存的?

java - SharedPreferences 默认模式