IPOD 2 之 搜索交互

MainActivity 采用 FramLayout布局 点击搜索菜单按钮,弹出半透明的搜索屏蔽层(不让下层获得事件焦点),并且展开搜索框


菜单中配置 含有SearchView控件的 anctionLayout

  <item
        android:id="@+id/action_search"
        android:showAsAction="always"
        android:actionLayout="@layout/layout_searchview"
        android:title="@string/action_search"
        android:icon="@android:drawable/ic_menu_search"
        />

初始化 界面

private void initView() {
		// 搜索屏蔽层

		linearLayout_search = (LinearLayout) this.findViewById(R.id.LinearLayout_search);
		linearLayout_search.setVisibility(View.GONE);
		linearLayout_search.setOnTouchListener(new OnTouchListener() {
			@Override
			public boolean onTouch(View v, MotionEvent event) {
				// 没有查询输入,触及此屏蔽层,退出查询界面
				if (searchView != null && searchView.getQuery().toString().isEmpty()) {
					searchView.setIconified(true);//折合搜索框
				}
				return true;// 消耗事件 屏蔽事件向下层传递
			}
		});

搜索菜单 监听处理:

/**
	 * 初始化 menu中的 搜索action
	 */
	private void initActionSearch(SearchView searchView) {
		if (searchView == null) {
			return;
		}
		// 搜索展开时
		searchView.setOnSearchClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				linearLayout_search.setVisibility(View.VISIBLE);
				updateMenu(STATE_MENU_SEARCH);
				//清除 ListView 为NULL 时,提示的空视图
				MainActivity.this.findViewById(R.id.textView_listview_empty).setVisibility(View.GONE);
			}
		});
		// 搜索关闭
		searchView.setOnCloseListener(new OnCloseListener() {

			@Override
			public boolean onClose() {
				//关闭屏蔽层 数据会自动清空
				linearLayout_search.setVisibility(View.GONE);
				System.out.println("---onClose----");
				updateMenu(STATE_MENU_PALYLIST);
				return false;
			}
		});

		searchView.setOnQueryTextListener(new OnQueryTextListener() {

			@Override
			public boolean onQueryTextSubmit(String query) {

				return false;
			}

			
			@Override
			public boolean onQueryTextChange(String newText) {

			//搜索的实现,后面会详细说明
				return false;
			}
		});
		

	}
	


搜索ListView的相关设置:

布局

  <LinearLayout
        android:id="@+id/LinearLayout_search"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="#7f717171"
        android:orientation="vertical" >

        <ListView
            android:id="@+id/listView_search"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >
        </ListView>

        <!-- ListView 为空的时候 显示的视图 -->
        <TextView
            android:id="@+id/textView_listview_empty"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="没有相关数据"
            android:visibility="gone"//gong 不显示
            android:textAppearance="?android:attr/textAppearanceLarge" />

    </LinearLayout>

设置 数据为空 是的显示 与 添加尾视图:

		listViewSearch.setEmptyView(this.findViewById(R.id.textView_listview_empty));//设置数据为null 时,显示的视图
		// 播放列表层

		listViewPlayList=(ListView)this.findViewById(R.id.listView_playlist);
	
		//ListView 尾视图
		View view=getLayoutInflater().inflate(R.layout.layout_listview_foot, null);
		TextView footTextView=(TextView) view.findViewById(R.id.textView_foot);
		footTextView.setText("共有 "+adapterPlayList.getCount()+" 首歌曲");
		//注意顺序 addFooterView 必须在 setAdapter前面
		listViewPlayList.addFooterView(view); 
		listViewPlayList.setAdapter(adapterPlayList);



ListView 屏蔽 尾视图事件响应:

listViewPlayList.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> arg0, View arg1, int id, long arg3) {
				 if(id== -1) {  
				        // 点击的是headerView或者footerView  
				        return;  
				    }  
				Toast.makeText(MainActivity.this, ((SongInfoBean)arg0.getAdapter().getItem(arg2)).getSourceString().trim(), 1000).show();
			}
		});




你可能感兴趣的:(IPOD 2 之 搜索交互)