我想在我的侦听器类中通过ID获取TextView,它处理一个微调器的onItemSelected事件。在我的主Activity中,我可以调用findViewById(R.id.textView1),它工作正常。但是如果我在我的spinner监听器类中调用相同的函数,它总是返回null并强制关闭应用程序。
任何人都知道为什么findViewById在我的主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);”工作?
感谢!!!
答案 0 :(得分:7)
为了findViewById
能够正常工作,您必须先前调用setContentView
答案 1 :(得分:1)
您在哪里设置内容视图?当您展开Activity
时,应该有一个方法onCreate
,您需要setContentView(R.id.textview1)
。
答案 2 :(得分:1)
如果您有其他帖子中提到的setContentView
,则可能需要指定查看textview的视图:
TextView tv = (TextView)view.findViewById (R.id.textView1);
答案 3 :(得分:0)
在我的主Activity中,我可以调用findViewById(R.id.textView1),它工作正常。但是如果我在我的spinner监听器类中调用相同的函数,它总是返回null并强制关闭应用程序。
由于我也是Android的新手,我可能错了,但我有一些我正在考虑的事情:
更多代码片段会很好。 nyyrikki
答案 4 :(得分:0)
这是一个如此古老的未回答问题,但它与我刚刚使用 getRootView() 解决的问题最接近。问题是 view
内的 OnItemSelectedListener
指的是微调器内显示的文本的 View 对象。
由于 findViewById
会查找 descendants of the current view,因此它不会找到您要查找的文本视图。
更换
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");
与
TextView tv = view.getRootView().findViewById(R.id.myTextView);
// I want to set the text of this text view to the value selected using the spinner
tv.setText("Something");
会使 findViewById
从根目录搜索您的文本视图,这可能是您期望发生的事情。