ActionBar中SearchView建立的2種方式

功能:查找通信錄 -- 輸入關鍵字進行檢索android


效果圖示例:ide









一、如今清單配置裏添加查找聯繫人的 權限 READ_CONTACTS佈局



二、在res下建立一個menu菜單文件夾this

菜單文件夾中菜單的佈局main_menu.xml  -- 2種SearchView的建立方式url


代碼spa


<?xml version="1.0" encoding="utf-8"?>.net

<menu xmlns:android="http://schemas.android.com/apk/res/android" >rest

<!-- 方式1:actionViewClass -->xml

    <item接口

        android:id="@+id/seachView"

        android:actionViewClass="android.widget.SearchView"

        android:showAsAction="always"

        android:title=""/>

    <!-- 方式2:actionLayout

    加 | 表示 有多個屬性 collapseActionView 表示摺疊起來該視圖 -->

    <item

        android:id="@+id/custom_seachView"

        android:actionLayout="@layout/item_activity"

        android:showAsAction="always|collapseActionView"

        android:icon="@android :drawable/ic_menu_compass"

        android:title=""/>


</menu>



==============



三、res/layout界面有2個佈局一個主佈局(ListView顯示電話和聯繫人)一個item佈局(SearchView自定義佈局)



activity_main.xml 佈局


代碼


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    tools:context="${relativePackage}.${activityClass}" >


    <ListView

        android:id="@+id/listview"

        android:layout_width="match_parent"

        android:layout_height="match_parent"/>


</RelativeLayout>



-----------------------


item_activity.xml 佈局


代碼


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

   android:orientation="horizontal" >


    <EditText

        android:id="@+id/edit_text"

        android:layout_width="0dp"

        android:layout_weight="1"

        android:layout_height="match_parent"/>

    

    <Button

        android:id="@+id/bt_id"

        android:layout_width="wrap_content"

        android:layout_height="match_parent"

        android:text="檢索"/>


</LinearLayout>



==========================


四、MainActivity類


代碼


//實現LoaderCallbacks接口

public class MainActivity extends FragmentActivity implements LoaderCallbacks<Cursor> {


private ListView listView;

private SearchView searchView;

private SimpleCursorAdapter adapter;//遊標適配器

private LoaderManager loaderManager;

//聯繫人通信錄路徑

private String url_phone = "content://com.android.contacts/data/phones";


@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);


this.listView = (ListView) this.findViewById(R.id.listview);

//this.editId = (EditText) this.findViewById(R.id.edit_text);


//只檢索通信錄的名字和電話

adapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, null,

new String[] { "display_name", "data1" }, new int[] {

android.R.id.text1,android.R.id.text2},

CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);


listView.setAdapter(adapter);

loaderManager = getSupportLoaderManager();

loaderManager.initLoader(1, null, this);

}


//======================LoaderCallbacks接口要重寫的方法=======================

@Override//建立加載器

public Loader<Cursor> onCreateLoader(int id, Bundle bundle) {

if (bundle != null) {

String keywords = bundle.getString("keywords");

return new CursorLoader(this, Uri.parse(url_phone), new String[] {

"_id","display_name", "data1" },

"display_name like ? or data1 like ?", new String[] {

keywords + "%", keywords + "%" }, null);

return new CursorLoader(this, Uri.parse(url_phone), new String[] {

"_id","display_name", "data1" }, null, null, null);

}

@Override//加載器建立完成

public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {

adapter.swapCursor(cursor);

}

@Override

public void onLoaderReset(Loader<Cursor> loader) {

adapter.swapCursor(null);

}

//選擇菜單

@Override

public boolean onCreateOptionsMenu(Menu menu) {

getMenuInflater().inflate(R.menu.main_menu, menu);

MenuItem item = menu.findItem(R.id.seachView);//Android自帶檢索

searchView = (SearchView) item.getActionView();

//經過setOnQueryTextListener方法來監聽

searchView.setOnQueryTextListener(new OnQueryTextListener() {

@Override

public boolean onQueryTextSubmit(String query) {

return false;

}

@Override

public boolean onQueryTextChange(String keywords) {

Bundle bundle = new Bundle();

bundle.putString("keywords", keywords);//用戶輸入要檢索的內容爲keywords

//重新查找一遍 -- 調用onCreateLoader方法

//參數1 -- 加載器標記(有該標記加載器就不建立 不然就建立)

//參數2 -- Bundle

loaderManager.restartLoader(1, bundle, MainActivity.this);

return false;

}

});

//自定義自動檢索

View custom_searchView = menu.findItem(R.id.custom_seachView).getActionView();

final EditText editId = (EditText) custom_searchView.findViewById(R.id.edit_text);

custom_searchView.findViewById(R.id.bt_id).setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

String edit_contact = editId.getText().toString();

Bundle bundle = new Bundle();

bundle.putString("keywords", edit_contact);

loaderManager.restartLoader(1, bundle, MainActivity.this);

}

});

return super.onCreateOptionsMenu(menu);

}


}

相關文章
相關標籤/搜索