Appcompatv7搜索小部件崩溃应用程序

时间:2014-12-09 11:05:31

标签: android proguard android-appcompat android-search

我已成功实施Appcompat V7搜索小工具。虽然在手机上调试应用程序它显示没有问题。(在我试过的许多手机上) 但是当我导出签名的应用程序。 安装并打开后,该活动崩溃了。 在“搜索小组件”中的OnCreateOptionsMenu()方法中显示错误

这是菜单

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/group_search_box"
android:title="@string/search_label"
android:icon="@drawable/ic_action_action_search"
app:showAsAction="ifRoom|collapseActionView"
app:actionViewClass="android.support.v7.widget.SearchView" />

以下是它的实施方式。

SearchManager searchManager = (SearchManager) 
getActivity().getSystemService(Context.SEARCH_SERVICE);
MenuItem searchMenuItem = menu.findItem(R.id.group_search_box);
SearchView searchView = (SearchView) searchMenuItem.getActionView();
searchView.setSearchableInfo(searchManager.getSearchableInfo(getActivity().getComponentName()));

这在调试时在所有手机上都能正常工作,但在构建apk后它无效。

我认为这是因为proguard。 我该如何修复这个错误?

3 个答案:

答案 0 :(得分:1)

您的模块目录中应该有一个proguard-rules.pro文件。

将以下内容添加到其中......

-keep class android.support.v7.** { *; }
-keep interface android.support.v7.** { *; }

答案 1 :(得分:0)

试试这个:

res- menu-&gt; actionbar_activity_base.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:yourapp="http://schemas.android.com/apk/res-auto" >
    <item
        android:id="@+id/item_menu_search"
       android:icon="@drawable/ic_action_search"
       yourapp:showAsAction="ifRoom|collapseActionView"
         yourapp:actionViewClass="android.support.v7.widget.SearchView" >
    </item>
</menu>

和java:

import android.support.v7.widget.SearchView;
import android.support.v7.widget.SearchView.OnQueryTextListener;

private SearchView mSearchView;


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.actionbar_activity_base, menu);
        final MenuItem searchItem = menu.findItem(R.id.item_menu_search);
        mSearchView = (SearchView) MenuItemCompat.getActionView(searchItem);

        mSearchView.setQueryHint(Html
                .fromHtml("<font color='#ffffff'> Search All</font>"));
        // mSearchView.setHintTextColor(getResources().getColor(android.R.color.white));
        // / mSearchView.setTextSize(14);
        isClosed = true;
        mSearchView.setOnQueryTextListener(new OnQueryTextListener() {

            @Override
            public boolean onQueryTextSubmit(String searchString) {
                // TODO Auto-generated method stub
                Log.i("fb", searchString + "submit");

            }

            @Override
            public boolean onQueryTextChange(String arg0) {
                // TODO Auto-generated method stub
                Log.i("fb", arg0 + "change");
                return false;
            }
        });

        mSearchView
                .setOnQueryTextFocusChangeListener(new OnFocusChangeListener() {

                    @Override
                    public void onFocusChange(View v, boolean hasFocus) {
                        // TODO Auto-generated method stub

                        if (!hasFocus) {

                            Log.i("fb", "focus chagne");
                            searchItem.collapseActionView();
                            mSearchView.setQuery("", false);



                        }
                    }
                });


        return true;
    }

答案 2 :(得分:0)

在搜索项目的menu.xml文件中刚刚将android:actionViewClass =“android.support.v7.widget.SearchView”更改为app:actionViewClass =“android.support.v7.widget.SearchView”并且代码工作正常,现在搜索项目如下所示:

<item android:id="@+id/search_menu"
    app:actionViewClass="android.support.v7.widget.SearchView"
    android:title="@string/search_title"
    android:icon="@drawable/ic_search_white_24dp"
    app:showAsAction="ifRoom|collapseActionView" />