在Android ActionBar中的EditText上添加addTextChangedListener()方法

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) {
    }
});

我在这个编辑框中不断收到空指针异常。问题可能非常明显,但它给我带来了很多麻烦。

谢谢!

2个回答

6
操作栏不在内容视图中,因此调用findViewById将始终返回null
相反,您需要调用menu.findItem(R.id.your_menu_item).getActionView()来获取对操作视图的引用。使用该视图,您可以调用findViewById以获取对EditText的引用(或者如果EditText是根视图,则已经有引用)。

Jake,你真的是一个非常出色的人!这是我最想要的最好的支持;-)。当然,我需要做这个:View ref1=menu.findItem(R.id.input).getActionView(); EditText search=(EditText) ref1.findViewById(R.id.searchbar);一切都很顺利。非常感谢和赞扬。 - Whitewall

0

两个想法,都不保证 -

你检查过了吗:

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

返回非空?如果返回null:

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

或者,您是否意外地在两者之间进行了某些搜索(例如,重新声明它)?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接