首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android本地搜索

Android本地搜索
EN

Stack Overflow用户
提问于 2010-05-12 15:17:08
回答 2查看 2.4K关注 0票数 2

我正在尝试在我的活动中实现本地搜索。我已经为清单文件添加了一个适当的意图过滤器和元数据标签,但是如果我点击搜索按钮,它会调用标准的android搜索框。我有什么问题?

清单文件:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.nixsolutions.invertigation.android.dataprovider"
android:versionCode="1"
android:versionName="1.0">
<application
    android:icon="@drawable/icon"
    android:label="@string/app_name"
    android:debuggable="true">


    <provider
        android:name="NoteProvider"
            android:authorities="com.nixsolutions.investigation.android.NoteProvider">
    </provider>
    <activity
        android:name="NotesList">
        <intent-filter>
            <action
                android:name="android.intent.action.MAIN" />
            <category
                android:name="android.intent.category.LAUNCHER" />

        </intent-filter>
        <intent-filter>
            <action
                android:name="android.intent.action.SEARCH" />
            <category
                android:name="android.intent.category.DEFAULT" />
        </intent-filter>
        <meta-data
            android:name="android.app.searchable"
            android:resource="@xml/searchable" />
    </activity>
</application>
<uses-sdk
    android:minSdkVersion="7" />

</manifest> 

searchable.xml:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android" 
android:label="Custom search"
android:hint="Custom hint"
android:searchMode="showSearchLabelAsBadge"
/>
EN

回答 2

Stack Overflow用户

发布于 2010-05-12 18:30:42

我认为您还需要一个(在应用程序级别上)标记为提供搜索的活动,通过:

代码语言:javascript
复制
<meta-data android:name="android.app.default_searchable" android:value=".LoremSearch" />

(用适当的值替换android:value)

例如:

代码语言:javascript
复制
<application android:icon="@drawable/icon" android:label="@string/app_name"
            android:debuggable="true"  android:allowBackup="true"
    >
    <meta-data android:name="android.app.default_searchable"
               android:value=".MySearchActivity" />

    <activity android:name=".MySearchActivity">
        <intent-filter>
            <action android:name="android.intent.action.SEARCH" />
        </intent-filter>
        <meta-data android:name="android.app.searchable"
               android:resource="@xml/searchable"/>
    </activity>

您为活动指定的方式仅在该活动中启用搜索。只有在应用程序级别添加元数据标记才能搜索所有活动。

完整搜索项目的See here

票数 2
EN

Stack Overflow用户

发布于 2019-11-04 18:31:19

代码语言:javascript
复制
    private List<MyBillResponseItem> itemList;
    private List<MyBillResponseItem> mainitemList;
    private List<MyBillResponseItem> selecteditemList;

  itemList = new ArrayList<MyBillResponseItem>();
        selecteditemList = new ArrayList<MyBillResponseItem>();
        mainitemList = new ArrayList<MyBillResponseItem>(); 

void filter(String text) {
        itemList.clear();
        Log.d("tag ::", "mainitemList 02" + mainitemList.size());
        for (MyBillResponseItem d : mainitemList) {
            if (d.getTitle().toLowerCase().contains(text.toLowerCase())) {
                itemList.add(d);
            }
            Log.d("tag ::", "itemList 02" + itemList.size());
        }
        //update recyclerview
        myBillingAdapter.notifyDataSetChanged();
    }

    private void GetBillingList(Date newFromDate, Date newToDate) {
        itemList.clear();
        final AlertDialog dialog = Utils.dialogProgress(getActivity());
        dialog.show();
        dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
        GetMyBillingReqEnvelope requestEnvelope = new GetMyBillingReqEnvelope();
        final String deviceId = Settings.Secure.getString(getActivity().getContentResolver(), Settings.Secure.ANDROID_ID);
        Log.d("tag ::", "device id :" + deviceId);
        Date c = Calendar.getInstance().getTime();
        System.out.println("Current time => " + c);

        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        String formattedDate = df.format(c);
        System.out.println(formattedDate);
        Date date = null;
        try {
            date = df.parse(formattedDate);
            System.out.println(date);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        String newFromDate1 = sdf.format(newFromDate);
        String newToDate1 = sdf.format(newToDate);
        RequestHeader requestHeader = new RequestHeader(Helper.getStringValue(getActivity(), "mobile"),
                Helper.getStringValue(getActivity(), "password"), Helper.getStringValue(getActivity(), "fcmToken"),
                Helper.getStringValue(getActivity(), "deviceId"), newFromDate1, newToDate1, empid);
        GetMyBillingReqBody requestBody = new GetMyBillingReqBody();
        requestEnvelope.setHeader(requestHeader);
        requestEnvelope.setZbody(requestBody);
        Call<GetMyBillingResEnvelope> responseEnvelopeCall = BhanuSamajApiImpl.getApi().getMyBilling(requestEnvelope);
        responseEnvelopeCall.enqueue(new Callback<GetMyBillingResEnvelope>() {
            @Override
            public void onResponse(Call<GetMyBillingResEnvelope> call, Response<GetMyBillingResEnvelope> response) {
                dialog.dismiss();
                if (response != null) {
                    try {
                        GetMyBillingData data = ((GetMyBillingResEnvelope) response.body()).getBody().getGetMyBillsResponse();


                        ObjectMapper mapper = new ObjectMapper();
                        GetMyBillingResponse getMyBillingResponse = new GetMyBillingResponse();
                        getMyBillingResponse = mapper.readValue(data.getGetMyBillsResult().toString(), GetMyBillingResponse.class);

                        itemList.addAll(getMyBillingResponse.getMyBillResponse());
                        mainitemList.addAll(getMyBillingResponse.getMyBillResponse());
                        myBillingAdapter = new MyBillingAdapter(getActivity(), R.layout.adpt_billing, itemList);
                        recyclerView.setAdapter(myBillingAdapter);

                        selected();


                        if (dialog1.isShowing()) {
                            dialog1.dismiss();
                        }
                        //  Log.d("tag", "CODE ::; " + myProfileResponse.getEmployeeAuth().getCode());
                        Log.d("tag", "response :: " + data.getGetMyBillsResult().toString());

                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }

            @Override
            public void onFailure(Call<GetMyBillingResEnvelope> call, Throwable t) {
                dialog.dismiss();
                t.printStackTrace();
            }

        });

    }


void selected() {

    edtSearch.addTextChangedListener(new TextWatcher() {

        public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
            // When user changed the Text
            String text = edtSearch.getText().toString().toLowerCase(Locale.getDefault());
            filter(text);


        }

        @Override
        public void afterTextChanged(Editable s) {

        }

        @Override
        public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                                      int arg3) {
            // TODO Auto-generated method stub
        }


    });


}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2816677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档