0

アクションバー(ActionbarSherlock)内に折りたたまれた検索EditViewメニューがあります。setShowAsActionメソッドがSHOW_AS_ACTION_NEVERに設定されている場合、キーボードが表示され、ユーザーは期待どおりに入力を開始できます。

ただし、値をSHOW_AS_ACTION_ALWAYSに設定すると、フォーカスがないように見えるため、ユーザーは入力を開始する前にEditTextをタッチする必要があります。

私のコードまたはこの問題を回避する方法に何か問題がありますか?

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    final MenuItem search = menu.add(0, MENU_SEARCH, MENU_SEARCH, getString(R.string.search));
    search.setIcon(R.drawable.ic_action_search);
    search.setActionView(R.layout.action_search);
    search.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case MENU_SEARCH:
            mSearch = (EditText) item.getActionView();
            mSearch.addTextChangedListener(mFilterTextWatcher);
            mSearch.requestFocus();
            mSearch.postDelayed(new Runnable() {
                @Override
                public void run() {
                    InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
                    imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
                }
            }, 200);

            break;
    }
    return true;
}

action_search.xml

<?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="@string/search" />
4

1 に答える 1

0

解決策は、アクティビティ内にフラグメントをネストすることでした。

public class ProductListActivity extends SherlockFragmentActivity {
    …
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        if (getSupportFragmentManager().findFragmentById(android.R.id.content) == null) {
            ProductListFragment list = new ProductListFragment();
            getSupportFragmentManager().beginTransaction().add(android.R.id.content, list).commit();
        }
    }

    public static class ProductListFragment extends SherlockListFragment {
        …
    }
} 
于 2012-10-10T00:06:14.390 に答える