2016-12-14

【Android Studio】為 app 加入查詢 / 尋找 / 搜尋 功能 -- 查詢 & 結果 在同一個畫面內

延續上一篇筆記:【Android Studio】為 app 加入查詢 / 尋找 / 搜尋 功能

是將查詢結果顯示在 SearchResultActivity,如果我想將查詢結果顯示在 MainActivity 呢?

可以的,只要稍加修改,將部份程式碼從 SearchResultActivity 搬到 MainActivity 就行了

AndroidManifest.xml 內容:
 
...
...

<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <!-- Points to searchable activity so the whole app can invoke search. -->
        <meta-data
            android:name="android.app.default_searchable"
            android:value=".MainActivity" />

        <activity
            android:name=".MainActivity"
            android:launchMode="singleTop">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <action android:name="android.intent.action.SEARCH" />
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>

            <meta-data
                android:name="android.app.searchable"
                android:resource="@xml/searchable"/>
        </activity>

    </application>
 

activity_main.xml 內容:
<RelativeLayout
    ...
    ...>
 
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="search result"
        android:id="@+id/txt1"/>
 
</RelativeLayout>

MainActivity 內容:
 
...
...

import android.app.SearchManager;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuInflater;
import android.support.v7.widget.SearchView;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity
{
    TextView txt1;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        txt1 = (TextView) findViewById(R.id.txt1);

        // 注意這一行指令
        handleIntent(getIntent());
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu)
    {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.options_menu, menu);

        // Associate searchable configuration with the SearchView
        SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView();
        searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));

        // 顯示完成鈕
        searchView.setSubmitButtonEnabled(true);

        return true;
    }

    @Override
    protected void onNewIntent(Intent intent)
    {
        handleIntent(intent);
    }


    private void handleIntent(Intent intent)
    {
        if (Intent.ACTION_SEARCH.equals(intent.getAction()))
        {
            String query = intent.getStringExtra(SearchManager.QUERY);
            txt1.setText("傳遞的查詢字串為 "+query.toString());
        }
    }
}