论坛首页 移动开发技术论坛

完整APP项目源码(含服务)-APP搜索功能

浏览 2088 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2016-08-30   最后修改:2016-08-30

 

TPshop完整APP项目(含服务器源码)第三课 - 商城搜索功能.

看图如下

 

功能描述: 点击顶部文本输入框弹出软键盘, 输入关键字后, 点击键盘上的"搜索"键后请求后台搜索API

并将结果展示在列表中.

结构分析: 自上而下, 顶部是一个自定义View的searchView ,接下来是一个后台设置的热词列表, 下面是一个搜索记录的listview

顶部SPSearchView

public class SPSearchView extends LinearLayout {
 
    private ImageView backImgv;
    private EditText searchEdtv;
    private SPSearchViewListener searchListener;
 
    /**
     * @param context
     * @param attrs
     */
    public SPSearchView(Context context, AttributeSet attrs) {
        super(context, attrs);
        View view = LayoutInflater.from(context).inflate(R.layout.search_heard_view, this);
        searchEdtv = (EditText)view.findViewById(R.id.search_edtv);
        backImgv = (ImageView)view.findViewById(R.id.back_imgv);
        searchEdtv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (searchListener != null) {
                    //searchListener.onSearchBoxClick(searchEdtv.getText().toString());
                }
            }
        });
        backImgv.setOnClickListener(new View.OnClickListener() {
 
            @Override
            public void onClick(View v) {
                if (searchListener != null) searchListener.onBackClick();
            }
        });
 
        searchEdtv.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView textView, int actionId, KeyEvent keyEvent) {    //响应键盘"搜索"键
                if (actionId == EditorInfo.IME_ACTION_SEARCH) {
 
                    notifyStartSearching(textView.getText().toString());
                }
                return true;
            }
        });
    }
 
    /**
     * 通知监听者 进行搜索操作
     * @param text
     */
    private void notifyStartSearching(String text){
        if (searchListener != null) {
            searchListener.onSearchBoxClick(text);
        }
    }
 
    public void setSearchKey(String searchKey){
        if (this.searchEdtv!=null && !SPStringUtils.isEmpty(searchKey)){
            this.searchEdtv.setText(searchKey);
        }
    }
 
    public EditText getSearchEditText(){
        return this.searchEdtv;
    }
 
    public void setSearchViewListener(SPSearchViewListener listener){
        this.searchListener = listener;
    }
 
    public interface SPSearchViewListener{
        public void onBackClick();
        public void onSearchBoxClick(String keyword);
    }
 
}

   搜索界面Activity的实现:

   布局文件:

   

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
 
    <com.soubao.tpshop.view.SPSearchView
        android:id="@+id/search_view"
        android:layout_width="match_parent"
        android:layout_height="50dip" />
 
    <ListView
        android:id="@+id/search_key_listv"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:divider="@color/separator_line"
        android:dividerHeight="1px"
        android:fadingEdge="none"
        android:fastScrollEnabled="false"
        android:footerDividersEnabled="false"
        android:headerDividersEnabled="false"
        android:layout_marginTop="50dip"
        android:layout_marginBottom="50dip"
        android:scrollbars="none"
        android:smoothScrollbar="true" />
 
    <Button
        android:id="@+id/search_delete_btn"
        android:layout_width="match_parent"
        android:layout_height="@dimen/height_button"
        android:layout_alignParentBottom="true"
        android:layout_marginLeft="20dip"
        android:layout_marginRight="20dip"
        android:layout_marginBottom="10dip"
        style="@style/textStyle.Normal.black"
        android:text="@string/delete_history"
        android:background="@drawable/tag_button_bg_unchecked"
        android:layout_centerHorizontal="true"/>
 
</RelativeLayout>

    onCreate中设置自定义标题

    

@Override
    protected void onCreate(Bundle savedInstanceState) {
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        super.onCreate(savedInstanceState);
    }

    搜索记录缓存到SharedPrefreences中

    

public void loadKey(){
        mSearchkeys = new ArrayList<String>();
        String searchKey = SPSaveData.getString(this, SPMobileConstants.KEY_SEARCH_KEY);
        if (!SPStringUtils.isEmpty(searchKey)){
            String[] keys = searchKey.split(",");
            if (keys !=null)
                for(int i=0; i< keys.length; i++){
                    if (!SPStringUtils.isEmpty(keys[i])){
                        mSearchkeys.add(keys[i]);
                    }
                }
        }
 
    }
 
    public void saveKey(String key){
        String searchKey = SPSaveData.getString(this, SPMobileConstants.KEY_SEARCH_KEY);
        if (!SPStringUtils.isEmpty(searchKey) && !searchKey.contains(key)) {
            searchKey+=","+key;
        }else{
            searchKey = key;
        }
        SPSaveData.putValue(this, SPMobileConstants.KEY_SEARCH_KEY, searchKey);
    }

    完整源码下载地址:  demo tpshop安卓源码下载

 

论坛首页 移动开发技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics