4

我在我的操作栏中(实际上是 ActionBarSherlock)中有我的 edittext 作为操作项。布局在自己的 xml 中,一切正常,我可以访问 edittext 的内容并轻松更改。

我想在这个edittext上添加一个更改监听器。加载 onCreateOptionsMenu(Menu menu) 并填充菜单后,我创建了我的

EditText search=(EditText) findViewById(R.id.searchbar); // its name in a frame layout

接着

search.addTextChangedListener(new TextWatcher(){

    @Override
    public void afterTextChanged(Editable s) {

    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before,
            int count) {
    }
});

我在这个edittext上不断收到空指针异常。问题可能是显而易见的,但这给我带来了很多麻烦..

谢谢!

4

2 回答 2

6

操作栏不在内容视图中,因此调用findViewById将始终返回null

相反,您需要调用menu.findItem(R.id.your_menu_item).getActionView()以获取对操作视图的引用。使用该视图,您可以调用findViewById以获取对 的引用EditText(或者如果EditText是根视图,则您已经拥有该引用)。

于 2012-04-18T17:34:35.483 回答
0

两个想法,都不能保证——

您是否检查过:

EditText search=(EditText) findViewById(R.id.searchbar);

返回非空?如果返回 null:

  • SetContentView (在正确的文件上!!)在该行之前吗?
  • 您的 xml 中是否有问题......或者它可能只需要“清理”并重建。

或者,您是否不小心在两者之间进行了搜索(例如,重新声明了它)?

于 2012-04-18T17:30:10.153 回答