android ActionBar中的EditText上的addTextChangedListener()

时间:2012-04-18 17:21:43

标签: android nullpointerexception android-edittext android-actionbar actionbarsherlock

我的edittext作为操作栏中的操作项(实际上是ActionBarSherlock)。布局是在自己的xml中,一切正常,我可以访问edittext的内容并毫不费力地进行更改。

我想在此edittext上添加更改侦听器。加载onCreateOptionsMenu(菜单菜单)并填写菜单后,我创建了我的

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上获得空指针异常。问题可能是令人眼花缭乱的事情,但这让我很麻烦。

谢谢!

2 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:0)

两个想法,都没有保证 -

你检查过:

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

返回非null?如果它返回null:

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

或者,你是否意外地在两者之间进行搜索(例如重新宣布它)?