Android - 使用 Android 支持库时无法在 SearchWidget 中找到 TextView

标签 android search android-support-library searchview

我使用以下代码 fragment 在 SearchView 小部件中找到 TextView。

    int autoCompleteTextViewID = getResources().getIdentifier("android:id/search_src_text", null, null);
    mQueryTextView = (AutoCompleteTextView) searchView.findViewById(autoCompleteTextViewID);

但是当切换到 android.support.v7.appcompat 支持库时,它不再工作了。

我猜这是因为支持库没有为“android:id/search_src_text”使用android:前缀, 但我不知道应该是什么。我试过了

getResources().getIdentifier("android.support.v7.appcompat:id/search_src_text", null, null);

附言更多代码 fragment :

@Override
public boolean onCreateOptionsMenu(Menu menu) {
        // this xml has funshion:actionViewClass="android.support.v7.widget.SearchView"
        getMenuInflater().inflate(R.menu.search_activity_actions_v7, menu);

        android.support.v7.widget.SearchView searchView = (android.support.v7.widget.SearchView) 
                MenuItemCompat.getActionView(menu.findItem(R.id.action_search_v7));
        if (searchView==null){
            FSLogcat.e(TAG, "searchView is null!");
        }else{
            SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
            searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
            searchView.setIconifiedByDefault(false);
            //searchView.requestFocus();
            searchView.setSubmitButtonEnabled(true);

            findSearchViewTextView(searchView);
            updateSearchViewText();
        }   

    return super.onCreateOptionsMenu(menu);
}

private void findSearchViewTextView(View searchView) {
    int autoCompleteTextViewID = getResources().getIdentifier("android:id/search_src_text", null, null);
    mQueryTextView = (AutoCompleteTextView) searchView.findViewById(autoCompleteTextViewID);
}

private void updateSearchViewText() {       
    if (mQueryTextView == null){
    } else {    
        mQueryTextView.setText(mQuery);
    }

}

请注意,SearchView 小部件很难将建议放入 TextView

//      in SearchAutoComplete
//        /**
//         * We override this method to avoid replacing the query box text when a
//         * suggestion is clicked.
//         */
//        @Override
//        protected void replaceText(CharSequence text) {
//        }

更新:在 SearchResultsActivity 获得 SearchWidget 作为 SearchResultsActivity 之后,就需要对 SearchWidget 进行操作。虽然可能应该在下一次迭代中将其实现为一个 Activity,但对于本周到期的当前版本,我只需要解决使用问题,即确保 SearchResultsActivity 上 SearchWidget 内的 TextView 始终具有最新查询。
也就是说,它是关键代码,如果它坏了,它会被重写,但绝对不是通过克隆标准小部件。应该是其他方式。

最佳答案

正如佩德罗奥利维拉所建议的那样

mQueryTextView = (AutoCompleteTextView) searchView.findViewById(R.id.search_src_text);

一行就可以了。

关于Android - 使用 Android 支持库时无法在 SearchWidget 中找到 TextView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25742886/

相关文章:

android - 未能找到 : com. android.support :support-v4:22. 2.0

android - 如何在 Android 中使用 'video/x-ms-asf' 内容类型流式传输音频?

java - 推特搜索 Api 连接超时

android - 如何将 Android 支持存储库添加到 Android Studio?

java - 错误:TransformException:java.util.zip.ZipException:重复条目:android/support/v4/app/TaskStackBuilderHoneycomb.class [duplicate]

ios - 类型 'NSPredicate has no subscript members'

android - 如何强制网站扩展以修复移动设备(Iphone android ..)

Java Collection 建议

android - 为什么不显示来自 SDCard 的图像?

php - 如何根据搜索结果动态更改表中的数据?