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

时间:2014-09-09 10:57:37

标签: android search android-support-library searchview

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

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

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

我想这是因为支持库不使用android:前缀用于" android:id / search_src_text", 但我不知道它应该是什么。我试过了

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

P.S。更多代码段:

@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始终具有最新查询。
也就是说,它是关键代码,如果它中断,它将被重写,但绝对不是通过克隆标准小部件。应该是其他方式。

3 个答案:

答案 0 :(得分:10)

佩德罗·奥利维拉建议

mQueryTextView = (AutoCompleteTextView) searchView.findViewById(R.id.search_src_text);
单行工作刚刚开始工作。

答案 1 :(得分:1)

kotlin 一行

mQueryTextView = findViewById<AutoCompleteTextView>(androidx.appcompat.R.id.search_src_text)

答案 2 :(得分:0)

您可以使用Resource#getSystem获取视图

Resources.getSystem().getIdentifier("search_src_text",
    "id", "android")