zoukankan      html  css  js  c++  java
  • 用安卓写搜索

    P.S.下图与最后的实现结果类似但不完全一样,这只是用processon画的UI图。

     

    这个地方不仅仅是搜索框,下面还有一个热搜的列表框,可以进行筛选,里面可以自己自定义一个string数组或者ArrayList放在里面,不需要访问数据库或者接受服务端。

         

      

    这里从搜索后展现所有学生的信息,可以点击list的item访问学生信息。

    ActivitySearch:

    package com.example.euphemiaxiao.activitysearch;
    
    import android.content.Context;
    import android.content.Intent;
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.text.TextUtils;
    import android.view.View;
    import android.view.inputmethod.InputMethodManager;
    import android.widget.AbsListView;
    import android.widget.AdapterView;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;
    import android.widget.SearchView;
    
    import org.json.JSONException;
    import org.json.JSONObject;
    
    import java.io.IOException;
    import java.io.OutputStream;
    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.URL;
    
    //import android.support.v7.widget.SearchView;
    
    public class ActivitySearch extends AppCompatActivity {
        //声明searchview和listview
        private SearchView assv;
        private ListView aslv;
        private ArrayAdapter<String> adapter;
        //这个是热搜,是固定数据,数据库中有但和数据库无关
        private final String[] actStrings={"小橘灯","明信片设计大赛","游戏晚会","雷锋月"};
    
        /*private static final long serialVersionUID =1L;
        //设定url路径,声明url
        String urlPath="http:\";
        URL url=new URL(urlPath);
    
        final JSONObject ClientKey = new JSONObject();
        final JSONObject Authorization = new JSONObject();*/
    
        public ActivitySearch() throws MalformedURLException {
        }
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_search);
            aslv=(ListView)findViewById(R.id.aslv);
            adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,actStrings);
            aslv.setAdapter(adapter);
            //设置aslv可以被过滤
            aslv.setTextFilterEnabled(true);
            //监听listview的滑动状态改变
            aslv.setOnScrollListener(new AbsListView.OnScrollListener()
            {
                @Override
                public void onScrollStateChanged(AbsListView absListView, int i) {
                    InputMethodManager imm=(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
                    if(imm!=null)
                    {
                        //如果输入法是显示状态,那就隐藏输入法
                        imm.hideSoftInputFromInputMethod(aslv.getWindowToken(),0);
                    }
                }
    
                @Override
                public void onScroll(AbsListView absListView, int i, int i1, int i2) {
    
                }
            });
    
            //监听点击listview中单个item
            aslv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                    Bundle bundle = new Bundle();
                    //将该item内数据获取
                    bundle.putString("AcInfoData",actStrings[i]);
                    Intent intent = new Intent();
                    intent.putExtras(bundle);
                    //将获取数据传给ActivityInfo界面并进行跳转
                    intent.setClass(ActivitySearch.this,ActivityInfo.class);
                    startActivity(intent);
    
                   /* try {
                        //使用httpPost的方式将ClientKey封装成JSON数据形式传递给服务器
                        //{"Activity":{"ActivityName":actStrings[i]}}
                        //首先使用JsonObject封装{"ActivityName":actStrings[i]}
                        ClientKey.put("ActivityName",actStrings[i]);
    
                        //再使用JsonObject封装{"Activity":{"ActivityName":actStrings[i]}}
                        Authorization.put("Activity",ClientKey);
    
                        //将JSON数据转换成String类型使用输出流向服务器写
                        String content = String.valueOf(Authorization);
    
                        //将封装好的数据传递过去,利用HttpURLConnection接口访问url
                        HttpURLConnection conn = (HttpURLConnection)url.openConnection();
                        conn.setConnectTimeout(5000);
                        //设置允许输出
                        conn.setDoOutput(true);
                        conn.setRequestMethod("POST");
                        //设置contentType
                        conn.setRequestProperty("Content-Type","application/json");
                        OutputStream os = conn.getOutputStream();
                        os.write(content.getBytes());
                        os.close();
                    } catch (JSONException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }*/
            });
    
            assv=(SearchView)findViewById(R.id.assv);
            //设置该searchview默认不自动缩小为图标
            assv.setIconifiedByDefault(false);
            //searchview初始是可以点击输入的状态
            assv.onActionViewExpanded();
            //是否获得焦点
            assv.setFocusable(false);
            //使失去焦点
            assv.clearFocus();
            //设置显示搜索按钮
            assv.setSubmitButtonEnabled(true);
            //设置默认显示文字
            assv.setQueryHint("输入活动名称");
            assv.setOnQueryTextListener(new SearchView.OnQueryTextListener()
            {
               // private String TAG = getClass().getSimpleName();
                //输入完成后,提交时触发的方法,一般情况是点击输入法中的搜索按钮才能触发。表示现在正式提交了
                @Override
                public boolean onQueryTextSubmit(String query) {
                    if(assv!=null) {
                        //得到输入管理对象
                        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                        if (imm != null) {
                            //这将让键盘在所有的情况下都被隐藏,但一般我们在点击搜索按钮后,输入法会乖乖自动隐藏
                            //输入法如果是显示状态,那么就隐藏输入法
                            imm.hideSoftInputFromInputMethod(assv.getWindowToken(), 0);
                        }
                        //不获取焦点
                        assv.clearFocus();
                    }
    
                    //将输入数据传入ActivityInfo中
                    Intent intent = new Intent(ActivitySearch.this,ActivityInfo.class);
                    intent.putExtra("AcInfoData",query);
                    startActivity(intent);
    
                    /*try {
                        ClientKey.put("ActivityName", query);
                        Authorization.put("Activity",ClientKey);
                        String content = String.valueOf(Authorization);
                        HttpURLConnection conn = (HttpURLConnection)url.openConnection();
                        conn.setConnectTimeout(5000);
                        //设置允许输出
                        conn.setDoOutput(true);
                        conn.setRequestMethod("POST");
                        //设置contentType
                        conn.setRequestProperty("Content-Type","application/json");
                        OutputStream os = conn.getOutputStream();
                        os.write(content.getBytes());
                        os.close();
                    } catch (JSONException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }*/
    
                    return true;
                }
    
                //在输入时触发的方法,当字符真正显示到searchView中触发
                @Override
                public boolean onQueryTextChange(String newText) {
                    if(TextUtils.isEmpty(newText))
                    {
                        //清除listview的过滤
                        aslv.clearTextFilter();
                    }
                    else
                    {
                        //使用用户输入的内容对listview的列表项
                        aslv.setFilterText(newText);
                    }
                    return true;
                }
            });
        }
    }

     ActivityInfo:

    package com.example.euphemiaxiao.activitysearch;
    
    import android.content.Intent;
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;
    import android.widget.TextView;
    
    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.util.ArrayList;
    
    public class ActivityInfo extends AppCompatActivity {
        //声明textview和listview
        private TextView aitv;
        private ListView ailv;
        //private final String[] sstrings={"2014211880 张三","2014211881 李四",
          //      "2014211883 赵五","2014211884 王六"};
        private ArrayAdapter<String> adapter;
        private ArrayList<String> studentInfo = new ArrayList<String>();
        private ArrayList<String> studentID = new ArrayList<String>();
    
        /*//声明url
        String urlPath="http:\";
        URL url=new URL(urlPath);*/
    
        public ActivityInfo() throws MalformedURLException {
        }
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_info);
            aitv=(TextView)findViewById(R.id.aitv);
            //从ActivitySearch中获取输入或点击的活动名称
            final Intent intent = getIntent();
            String AcInfoData = intent.getStringExtra("AcInfoData");
            aitv.setText("活动:"+AcInfoData);
    
            /*studentInfo.add("2014211880 张三");
            studentInfo.add("2014211881 李四");
            studentInfo.add("2014211883 赵五");
            studentInfo.add("2014211884 王六");*/
    
            ailv=(ListView)findViewById(R.id.ailv);
    
            /*try {
                //用HttpURLConnection接口访问url
                HttpURLConnection conn = (HttpURLConnection)url.openConnection();
                //服务器返回的响应码
                int code = conn.getResponseCode();
                //当响应码为200时,表示服务器接收并处理了请求,将返回处理结果
                if (code==200) {
                    BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
                    String retData = null;
                    String responseData = "";
                    while((retData=in.readLine())!=null)
                    {
                        responseData+=retData;
                    }
                    //创建JSONObject对象,responseData是从服务器获得的Json数据
                    JSONObject jsonObject = new JSONObject(responseData);
    
                    //获得JSONObject对象的值,该值是一个JSON数组,“student”是这个数据的键值
                    JSONArray actArray = jsonObject.getJSONArray("student");
    
                    for (int i = 0; i < actArray.length(); i++) {
                        //获得JSON数组中的每一个JSONObject对象
                        JSONObject actObject = actArray.getJSONObject(i);
                        String stuID=actObject.getString("studentID");
                        studentID.add(stuID);
                        String stuName = actObject.getString("name");
                        //studentName.add(stuName);
                        studentInfo.add(stuID+" "+stuName);
                    }
                }
            } catch (JSONException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }*/
    
            adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,studentInfo);
            ailv.setAdapter(adapter);
            ailv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                    //将ArrayList转换成String数组
                    int size=studentInfo.size();
                    String[] studentInfoStrs=(String[])studentInfo.toArray(new String[size]);
                    String str = studentInfoStrs[i];
                    String[] st = str.split(" ");
    
                    Bundle bundle = new Bundle();
                    //获取点击的item的内容
                    bundle.putString("AcStudentInfo",st[0]);
                    //将获取的内容传给下一个界面
                    Intent intent1=new Intent();
                    intent1.putExtras(bundle);
                    //这里将学号传给下一个界面,别忘了改一下下一个界面的名称
                    intent1.setClass(ActivityInfo.this,test.class);
                    startActivity(intent1);
    
                   /* JSONObject ClientKey = new JSONObject();
                    JSONObject Authorization = new JSONObject();
                    try {
                        //将ClientKey封装成JSON数据的形式传递给服务器
                        //使用JsonObject封装{"studentID":学号}
                        ClientKey.put("studentID",st[0]);
    
                        //使用JsonObject封装{"Student":{"studentID":studentIDStr[i]}}
                        Authorization.put("Student",ClientKey);
    
                        //把JSON数据转换成String类型实用输出流向服务器写
                        String content = String.valueOf(Authorization);
    
                        //使用HttpURLConnection接口访问url
                        HttpURLConnection conn = (HttpURLConnection)url.openConnection();
    
                        conn.setConnectTimeout(5000);
                        //设置允许输出
                        conn.setDoOutput(true);
                        conn.setRequestMethod("POST");
                        //设置contentType
                        conn.setRequestProperty("Content-Type","application/json");
                        OutputStream os = conn.getOutputStream();
                        os.write(content.getBytes());
                        os.close();
                    } catch (JSONException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }*/
                }
            });
        }
    }

    里面用JSON数据的因为这部分接口是别人写的,代码编译没有问题,但不打保票逻辑一定没问题,所以打了注释,其他部分总体的硬界面的跳转显示是没有问题的。

  • 相关阅读:
    django之admin管理工具
    django之中间件
    cookie和session
    day052-53 django框架
    day050 前端Jquery库的使用
    sprint
    Scrum 项目1.0
    【团队项目】3.0
    [读书笔记]
    【团队项目】2.0
  • 原文地址:https://www.cnblogs.com/xym4869/p/8476034.html
Copyright © 2011-2022 走看看