1

アクションバーで使用されるメニュー項目からアクションビューを取得する際に問題があります。互換性の理由から、Actionbarsherlock を使用しています。

私は onCreateOptionMenu でこのコードを使用しています:

        menu.add("Search")
        .setIcon(R.drawable.ic_search)
        .setActionView(R.layout.collapsible_edittext)
        .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);

私が設定したActionViewは、幅に関して「fill_parent」になるXMLからの単なるEditTextです。この edittext にアクセスしてイベント ハンドラーを登録する方法が見つからなかったので、oncreateoptionsmenu (および後で onOptionsItemSelected) で "R.layout.collapsible_edittext" を膨張させ、結果を acitonview として追加しようとしました。これを行った後、編集テキストにアクセスできましたが、アイコンをクリックした後、アクションバーの全幅を使用できなくなりました。

ActionView に適切にアクセスする方法のヒントはありますか?

4

1 に答える 1

2

EditTextレイアウト

<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:singleLine="true"
          android:hint="Search"/>

コード

 private EditText search;


  private TextWatcher filterTextWatcher = new TextWatcher() {
        public void afterTextChanged(Editable s) {
        }

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

        public void onTextChanged(CharSequence s, int start, int before, int count) {
            //... your logic here    
        }
    };

@Override
    public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) {
        menu.add(0, 3, 3, R.string.ac_search  ).setIcon(R.drawable.ic_action_search).setActionView(R.layout.action_search).setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
        return super.onCreateOptionsMenu(menu);
    }


  @Override
    public boolean onOptionsItemSelected(com.actionbarsherlock.view.MenuItem item) {
        switch (item.getItemId()){

            case 3:
                search = (EditText) item.getActionView();
                search.addTextChangedListener(filterTextWatcher);
                break;

        }
        return true;
    }
于 2012-08-23T14:01:34.797 に答える