用安卓写搜索

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

 

posted @ 2018-02-26 21:04  Shaw_喆宇  阅读(169)  评论(0编辑  收藏  举报