2011-03-07 46 views
2

我试图在侦听器类中处理微调器的onItemSelected事件时通过ID获取TextView。在我的主要活动中,我可以调用findViewById(R.id.textView1),它工作正常。但是,如果我在我的微调监听器类中调用相同的函数,它总是返回null并强制应用程序关闭。Android findViewById在主类以外的类中使用时返回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的电视= view.findViewById(R.id .myTextView);”上班?

谢谢!

回答

7

为了findViewById工作,你必须以前叫setContentView

+1

在我的主Activity中,我已经调用了setContentView(R.layout.somename)。然后布局显示微调,当我从列表中选择一个项目时,我需要它使用findViewById更新TextView。 – Bumper 2011-03-07 17:59:34

+0

对不起,我把“somename”,因为我没有我的代码在我面前,但它确实将内容视图设置为微调器所在的布局。 – Bumper 2011-03-07 18:04:07

+0

粘贴完整的代码,以便我们可以提供诊断。 – Cristian 2011-03-07 18:09:45

1

你在哪里设置内容有何看法?当您扩展Activity时,应该有一个方法onCreate,其中您需要setContentView(R.id.textview1)

+0

我只做了listener类扩展Activity,因为我无法让view.findViewById()工作。我不知道我是否应该在这里扩展活动。 – Bumper 2011-03-07 18:01:20

1

如果你有一个setContentView在其他职位提到你可能需要指定在该视图找到的TextView:

TextView tv = (TextView)view.findViewById (R.id.textView1); 
+0

对不起,我忘了在我的文章中发表演说,但它是在我的实际代码中。我现在只是将它添加到我的帖子中。 – Bumper 2011-03-07 18:02:22

0

在我的主要活动我可以调用findViewById(R.id .textView1),它工作正常。但是,如果我在我的微调监听器类中调用相同的函数,它总是返回null并强制应用程序关闭。

由于我是新来的Android得,我可能是错的,但我有我的想法的几件事情:

  1. 为什么你的听众延伸的活动?
  2. 如果你再次调用findByView,android必须再次沿树找到正确的ID,只要在field变量中找到它就保存textView
  3. 如果这真的是一个活动,你是否激发了正确的意图在你的主要活动中启动它?
  4. 您是否将该活动添加到manifest.xml?
  5. ......正如其他人所说,这可能是错误的背景。

更多的代码片段会很好。 nyyrikki