3

私は ActionBarSherlock を使用しています。その中に EditText を MenuItem.SHOW_AS_ACTION_ALWAYS で表示したいと考えています。バーの全幅を取り、必要に応じて表示します。しかし、TextWatcher を追加しようとすると問題が発生します。

したがって、ここで受け入れられた回答に基づいて: http://goo.gl/ite6h私は書きます:

    EditText search;
    public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) {

    menu.add(0, 1, 1, R.string.inlineSearch).setIcon(R.drawable.action_search).setActionView(search).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
    return super.onCreateOptionsMenu(menu);
    }

    private TextWatcher filterTextWatcher = new TextWatcher() {
    public void afterTextChanged(Editable s) {
        Log.e("TextWatcher","after");
    }

    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        Log.e("TextWatcher","before");
    }

    public void onTextChanged(CharSequence s, int start, int before, int count) {
        Log.e("TextWatcher","onText");
    }

}; 

@Override
    public boolean onOptionsItemSelected(com.actionbarsherlock.view.MenuItem item) {
        Log.e("onOptions",""+item.getItemId()); // Line 150
        switch (item.getItemId()) {
            case 1:
                search = (EditText) item.getActionView();
                search.addTextChangedListener(filterTextWatcher);
                search.requestFocus();
                InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
        }  
        return true;
    }  

問題は、行 150 に到達せず (ログなし)、リスナーが検索に追加されない (EditText) ことです。

誰かが私を正しい方向に向けることができますか?

4

1 に答える 1

5

ご参考までに、

これは私にとってはうまくいき、ActionBarの幅全体にわたってEditTextを提供し(MenuItem.SHOW_AS_ACTION_ALWAYSを使用している場合でも、RelativeLayoutなしでは実行できないようです)、そのTextWatcherメソッドを呼び出します。

EditText search;
public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) {

    LayoutInflater inflater=(LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    RelativeLayout rl =(RelativeLayout)inflater.inflate(R.layout.search_text, null);
    search=(EditText)rl.getChildAt(0);
    search.addTextChangedListener(filterTextWatcher);
    menu.add(0, 1, 1, R.string.inlineSearch).setIcon(R.drawable.action_search).setActionView(rl).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);

    return super.onCreateOptionsMenu(menu);
    }

private TextWatcher filterTextWatcher = new TextWatcher() {
public void afterTextChanged(Editable s) {
    Log.e("TextWatcher","after");
    }

public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    Log.e("TextWatcher","before");
    }

public void onTextChanged(CharSequence s, int start, int before, int count) {
    Log.e("TextWatcher","onText");
    }

    };

&私のlayout / search_text:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:orientation="horizontal" 
          android:layout_width="fill_parent" 
          android:layout_height="wrap_content" 
          android:gravity="fill_horizontal"
          >
    <EditText 
    android:id="@+id/search_text"
              style="@style/EditTextHoloDark"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:layout_marginLeft="4dip"
              android:imeActionId="1337"
              android:imeOptions="actionDone"
              android:inputType="textCapCharacters|textNoSuggestions"
              android:singleLine="true"
              android:hint="Search"
              android:textStyle="bold"
              android:drawableLeft="@drawable/action_search"

              />
    </RelativeLayout>
于 2012-08-20T19:19:57.823 に答える