Android的搜索查看OnQueryTextListener与数据库不工作 [英] Android Searchview OnQueryTextListener with database not working

查看:178
本文介绍了Android的搜索查看OnQueryTextListener与数据库不工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在我的片段类来实现搜索查看,我也跟着<一个href=\"https://github.com/rudsonlive/Navigation-Drawer-ViewPager-ActionBarCompat/blob/master/NavigationViewPagerLiveo/src/br/liveo/fragments/MyAppsFragment.java\"相对=nofollow>此内容教程,但它不是搜索项,我在这里失去了一些东西,但我找不到它是什么,这里是我试过到目前为止:

 公共类FragmentClientes扩展片段实现OnQueryTextListener,android.widget.SearchView.OnCloseListener {
    私人布尔searchCheck;
    清单&LT; ClienteModel&GT; clientes;
    私人的ListView LV;
    私人查看rootView;
    私人进度进度;
    私人的LinearLayout footerLinearLayout;
    公共FragmentActivity活动;
    私人搜索查看搜索查看;
    私人字符串currentQuery = NULL;
    私人ClientViewAdapter广告;    @覆盖
    公共查看onCreateView(LayoutInflater充气器,容器的ViewGroup,
            捆绑savedInstanceState){
        // TODO自动生成方法存根
        rootView = inflater.inflate(R.layout._fragment_clientes,集装箱,FALSE);        rootView.setLayoutParams(新的LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));        进度=新的ProgressBar(getActivity(),空,android.R.attr.progressBarStyle);
        LinearLayout.LayoutParams progressBarParams =新LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.WRAP_CONTENT,
                LinearLayout.LayoutParams.WRAP_CONTENT);
        progressBar.setLayoutParams(progressBarParams);
        progressBar.setPadding(6,6,6,6);
        footerLinearLayout =新的LinearLayout(getActivity());
        AbsListView.LayoutParams的LayoutParams =新AbsListView.LayoutParams(
                LinearLayout.LayoutParams.MATCH_PARENT,
                LinearLayout.LayoutParams.WRAP_CONTENT);
        footerLinearLayout.setGravity(Gravity.CENTER);
        footerLinearLayout.setLayoutParams(的LayoutParams);
        footerLinearLayout.addView(进度);        尝试{            LV =(ListView控件)rootView.findViewById(R.id.listaClientes);            clientes =新的ArrayList&LT; ClienteModel&GT;();
            广告=新ClientViewAdapter(getActivity(),这一点,clientes);            lv.setVerticalFadingEdgeEnabled(真);
            lv.setVerticalScrollBarEnabled(真);            lv.setOnScrollListener(新EndlessScrollListener(){
                @覆盖
                公共无效onLoadMore(INT页,诠释totalItemsCount){
                    新LoadMoreClientTask(进度,FragmentClientes.this,广告,getActivity())执行(页);
                }
            });            lv.addFooterView(footerLinearLayout);
            lv.setAdapter(广告);
            新LoadMoreClientTask(进度,为此,广告,getActivity())执行(1);        }赶上(例外五){
            e.printStackTrace();
        }        返回rootView;
    }    私人无效gerarToast(CharSequence的消息){
        INT持续时间= Toast.LENGTH_LONG;
        吐司面包吐司=
                .makeText(getActivity(),消息,持续时间);
        toast.show();
    }    @覆盖
    公共无效onActivityCreated(捆绑savedInstanceState){
        // TODO自动生成方法存根
        super.onActivityCreated(savedInstanceState);
        setHasOptionsMenu(真);
    }    @覆盖
    公共无效onCreateOptionsMenu(菜单菜单,MenuInflater气筒){
        // TODO自动生成方法存根
        super.onCreateOptionsMenu(菜单,充气器);
        inflater.inflate(R.menu.menu,菜单);        搜索查看=(搜索查看)MenuItemCompat.getActionView(menu​​.findItem(Menus.PROCURAR));
        如果(搜索查看!= NULL){
            sea​​rchView.setOnQueryTextListener(新SearchView.OnQueryTextListener(){                公共布尔onQueryTextSubmit(字符串提交){
                    showResults(提交);
                    返回false;                }                公共布尔onQueryTextChange(字符串变化){                    // TODO自动生成方法存根                            showResults(变化);
                    返回false;
                }
            });
        }        sea​​rchView.setQueryHint(this.getString(R.string.search));        ((EditText上)searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text))
        .setHintTextColor(getResources()的getColor(R.color.white));        menu.findItem(Menus.PROCURAR).setVisible(真);        sea​​rchCheck =真;
    }    公共布尔的OnClose(){
        showResults();
        返回false;
    }    @覆盖
    公共布尔onOptionsItemSelected(菜单项项){
        // TODO自动生成方法存根        开关(item.getItemId()){        案例Menus.PROCURAR:
            sea​​rchCheck =真;
            打破;
        }
        返回true;
    }    私人无效showResults(查询字符串){        尝试{            LV =(ListView控件)rootView.findViewById(R.id.listaClientes);
            Repositorio mRepositorio =新Repositorio(getActivity());
            mRepositorio.getClientes(1,5,查询);            lv.setVerticalFadingEdgeEnabled(真);
            lv.setVerticalScrollBarEnabled(真);            lv.addFooterView(footerLinearLayout);            lv.setOnScrollListener(新EndlessScrollListener(){
                @覆盖
                公共无效onLoadMore(INT页,诠释totalItemsCount){
                    新LoadMoreClientTask(进度,FragmentClientes.this,广告,getActivity())执行(页);
                }
            });            lv.setAdapter(广告);
            新LoadMoreClientTask(进度,为此,广告,getActivity())执行(1);
        }赶上(例外五){
            e.printStackTrace();
        }    }
}

该getClientes功能:

 公开名单&LT; ClienteModel&GT; getClientes(整数pagina,限制整数,字符串CONSULTA)抛出的SQLException {        整数偏移量= pagina *上限 - 上限;
        清单&LT; ClienteModel&GT; listaDeRegistros =新的ArrayList&LT; ClienteModel&GT;();        如果(consulta.isEmpty()){
            查询=SELECT * FROM+ tabelaCLIENTES +WHERE credencial_id =+ mSessao.getString(id_credencial)+限制+偏移+,+限制;
        }其他{
            查询=SELECT * FROM+ tabelaCLIENTES +WHERE(credencial_id =+ mSessao.getString(id_credencial)+)和(诺姆LIKE'%+ CONSULTA +%)LIMIT+偏移+,+限制;
        }        的System.out.println(查询);        尝试{            光标mCursor = bd.rawQuery(查询,NULL);            如果(mCursor.getCount()大于0){
                如果(mCursor.moveToFirst()){
                    做{
                        ClienteModel mClienteModel =新ClienteModel();                        mClienteModel.setClientes_id(mCursor.getInt(mCursor.getColumnIndex(ClienteModel.Coluna.CLIENTES_ID)));
                        mClienteModel.setId_rm(mCursor.getInt(mCursor.getColumnIndex(ClienteModel.Coluna.ID_RM)));
                        mClienteModel.setCredencial_id(mCursor.getInt(mCursor.getColumnIndex(ClienteModel.Coluna.CREDENCIAL_ID)));
                        mClienteModel.setNome(mCursor.getString(mCursor.getColumnIndex(ClienteModel.Coluna.NOME)));
                        mClienteModel.setTipo(mCursor.getString(mCursor.getColumnIndex(ClienteModel.Coluna.TIPO)));
                        mClienteModel.setInformacao_adicional(mCursor.getString(mCursor.getColumnIndex(ClienteModel.Coluna.INFORMACAO_ADICIONAL)));
                        mClienteModel.set_criado(mCursor.getString(mCursor.getColumnIndex(ClienteModel.Coluna._CRIADO)));
                        mClienteModel.set_modificado(mCursor.getString(mCursor.getColumnIndex(ClienteModel.Coluna._MODIFICADO)));
                        mClienteModel.set_status(mCursor.getString(mCursor.getColumnIndex(ClienteModel.Coluna._STATUS)));                        listaDeRegistros.add(mClienteModel);                    }而(mCursor.moveToNext());
                }
            }        }赶上(例外五){
            e.printStackTrace();
        }        返回listaDeRegistros;
    }

该LoadMoreTask:

 保护布尔doInBackground(整数...参数){
        INT npagina =参数[0];
        cliente =新的ArrayList&LT; ClienteModel&GT;();        尝试{            Repositorio mRepositorio =新Repositorio(背景);
            清单listaDeClientes = mRepositorio.getClientes(npagina,5,);            cliente = listaDeClientes;            的System.out.println(pagina+ npagina);        }赶上(例外五){
            e.printStackTrace();
            返回false;
        }
        返回true;
    }


解决方案

解决:

 公共布尔onQueryTextChange(字符串变化){                    // TODO自动生成方法存根
                    如果(searchCheck){
                        showResults();
                        尝试{
                            clientes =新的ArrayList&LT; ClienteModel&GT;();
                            Repositorio mRepositorio =新Repositorio(getActivity());
                            清单Clientes = mRepositorio.getClientes(其他城市,15,0);                            clientes = Clientes;
                            广告=新ClientSearchViewAdapter(getActivity(),这一点,clientes);                            lv.addFooterView(footerLinearLayout);                            lv.setOnScrollListener(新EndlessScrollListener(){
                                @覆盖
                                公共无效onLoadMore(INT页,诠释totalItemsCount){
                                    新LoadMoreClientTask(进度,FragmentClientes.this,广告,getActivity())执行(页);
                                    的System.out.println(PAGE+页);
                                }
                            });                            lv.setAdapter(广告);
                            新LoadMoreClientTask(进度,为此,广告,getActivity())执行(1);
                            的System.out.println(Pesquisa:+ clientes);
                        }赶上(例外五){
                            e.printStackTrace();
                        }                    }
                    返回false;
                }

I'm trying to implement a Searchview in my Fragment Class, I followed THIS tutorial, but it is not searching for the item, I'm missing something here, but I can't find what it is, here is what I tried so far:

public class FragmentClientes extends Fragment implements OnQueryTextListener, android.widget.SearchView.OnCloseListener {


    private boolean searchCheck;
    List<ClienteModel> clientes;
    private ListView lv;
    private View rootView;
    private ProgressBar progressBar;
    private LinearLayout footerLinearLayout;
    public FragmentActivity activity;
    private SearchView searchView;
    private String currentQuery = null;
    private ClientViewAdapter ad;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {


        // TODO Auto-generated method stub
        rootView = inflater.inflate(R.layout._fragment_clientes, container, false);

        rootView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT ));

        progressBar = new ProgressBar(getActivity(), null, android.R.attr.progressBarStyle);
        LinearLayout.LayoutParams progressBarParams = new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.WRAP_CONTENT,
                LinearLayout.LayoutParams.WRAP_CONTENT);
        progressBar.setLayoutParams(progressBarParams);
        progressBar.setPadding(6, 6, 6, 6);
        footerLinearLayout = new LinearLayout(getActivity());
        AbsListView.LayoutParams layoutParams = new AbsListView.LayoutParams(
                LinearLayout.LayoutParams.MATCH_PARENT,
                LinearLayout.LayoutParams.WRAP_CONTENT);
        footerLinearLayout.setGravity(Gravity.CENTER);
        footerLinearLayout.setLayoutParams(layoutParams);
        footerLinearLayout.addView(progressBar);

        try {

            lv = (ListView) rootView.findViewById(R.id.listaClientes);

            clientes = new ArrayList<ClienteModel>();
            ad = new ClientViewAdapter(getActivity(), this, clientes);

            lv.setVerticalFadingEdgeEnabled(true);
            lv.setVerticalScrollBarEnabled(true);

            lv.setOnScrollListener(new EndlessScrollListener(){
                @Override
                public void onLoadMore(int page, int totalItemsCount) {
                    new LoadMoreClientTask(progressBar,FragmentClientes.this,ad,getActivity()).execute(page);
                }
            });

            lv.addFooterView(footerLinearLayout);


            lv.setAdapter(ad);
            new LoadMoreClientTask(progressBar,this,ad,getActivity()).execute(1);

        } catch (Exception e) {
            e.printStackTrace();
        }

        return rootView;
    }



    private void gerarToast(CharSequence message) {
        int duration = Toast.LENGTH_LONG;
        Toast toast = Toast
                .makeText(getActivity(), message, duration);
        toast.show();
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onActivityCreated(savedInstanceState);
        setHasOptionsMenu(true);
    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        // TODO Auto-generated method stub
        super.onCreateOptionsMenu(menu, inflater);
        inflater.inflate(R.menu.menu, menu);

        searchView = (SearchView) MenuItemCompat.getActionView(menu.findItem(Menus.PROCURAR));
        if (searchView != null) {
            searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {

                public boolean onQueryTextSubmit(String submit) {
                    showResults(submit);
                    return false;

                }

                public boolean onQueryTextChange(String change) {

                    //TODO Auto-generated method stub

                            showResults(change);


                    return false;
                }
            });
        }

        searchView.setQueryHint(this.getString(R.string.search));

        ((EditText)searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text))
        .setHintTextColor(getResources().getColor(R.color.white));

        menu.findItem(Menus.PROCURAR).setVisible(true);

        searchCheck = true;


    }

    public boolean onClose() {
        showResults("");
        return false;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // TODO Auto-generated method stub

        switch (item.getItemId()) {

        case Menus.PROCURAR:
            searchCheck = true;
            break;
        }
        return true;
    }





    private void showResults(String query) {

        try {

            lv = (ListView) rootView.findViewById(R.id.listaClientes);
            Repositorio mRepositorio = new Repositorio(getActivity());
            mRepositorio.getClientes(1,5,query);

            lv.setVerticalFadingEdgeEnabled(true);
            lv.setVerticalScrollBarEnabled(true);

            lv.addFooterView(footerLinearLayout);

            lv.setOnScrollListener(new EndlessScrollListener(){
                @Override
                public void onLoadMore(int page, int totalItemsCount) {
                    new LoadMoreClientTask(progressBar,FragmentClientes.this,ad,getActivity()).execute(page);
                }
            });

            lv.setAdapter(ad);
            new LoadMoreClientTask(progressBar,this,ad,getActivity()).execute(1);




        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

The getClientes function:

public List<ClienteModel> getClientes(Integer pagina, Integer limit, String consulta) throws SQLException {

        Integer offset = pagina * limit - limit;


        List<ClienteModel> listaDeRegistros = new ArrayList<ClienteModel>();



        if(consulta.isEmpty()) {
            query = "SELECT * FROM " + tabelaCLIENTES + " WHERE credencial_id = " + mSessao.getString("id_credencial") + " LIMIT " + offset + ", " + limit;
        }else {
            query = "SELECT * FROM " + tabelaCLIENTES + " WHERE (credencial_id = " + mSessao.getString("id_credencial") + ") and (nome LIKE '%"+consulta+"%') LIMIT " + offset + ", " + limit;
        }

        System.out.println(query);

        try {

            Cursor mCursor = bd.rawQuery(query, null);

            if (mCursor.getCount() > 0) {
                if (mCursor.moveToFirst()) {
                    do {
                        ClienteModel mClienteModel = new ClienteModel();

                        mClienteModel.setClientes_id(mCursor.getInt(mCursor.getColumnIndex(ClienteModel.Coluna.CLIENTES_ID)));
                        mClienteModel.setId_rm(mCursor.getInt(mCursor.getColumnIndex(ClienteModel.Coluna.ID_RM)));
                        mClienteModel.setCredencial_id(mCursor.getInt(mCursor.getColumnIndex(ClienteModel.Coluna.CREDENCIAL_ID)));
                        mClienteModel.setNome(mCursor.getString(mCursor.getColumnIndex(ClienteModel.Coluna.NOME)));
                        mClienteModel.setTipo(mCursor.getString(mCursor.getColumnIndex(ClienteModel.Coluna.TIPO)));
                        mClienteModel.setInformacao_adicional(mCursor.getString(mCursor.getColumnIndex(ClienteModel.Coluna.INFORMACAO_ADICIONAL)));
                        mClienteModel.set_criado(mCursor.getString(mCursor.getColumnIndex(ClienteModel.Coluna._CRIADO)));
                        mClienteModel.set_modificado(mCursor.getString(mCursor.getColumnIndex(ClienteModel.Coluna._MODIFICADO)));
                        mClienteModel.set_status(mCursor.getString(mCursor.getColumnIndex(ClienteModel.Coluna._STATUS)));

                        listaDeRegistros.add(mClienteModel);

                    } while (mCursor.moveToNext());
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        }

        return listaDeRegistros;
    }

The LoadMoreTask:

 protected Boolean doInBackground(Integer... parameters) {
        int npagina = parameters[0];
        cliente= new ArrayList<ClienteModel>();

        try {

            Repositorio mRepositorio = new Repositorio(context);


            List listaDeClientes = mRepositorio.getClientes(npagina,5,"");

            cliente = listaDeClientes;

            System.out.println("pagina " + npagina);

        }catch (Exception e){
            e.printStackTrace();
            return false;
        }
        return true;
    }

解决方案

Solved:

  public boolean onQueryTextChange(String change) {

                    //TODO Auto-generated method stub
                    if (searchCheck) {
                        showResults();


                        try {


                            clientes = new ArrayList<ClienteModel>();
                            Repositorio mRepositorio = new Repositorio(getActivity());
                            List Clientes = mRepositorio.getClientes(change, 15, 0);

                            clientes = Clientes;
                            ads = new ClientSearchViewAdapter(getActivity(), this, clientes);

                            lv.addFooterView(footerLinearLayout);

                            lv.setOnScrollListener(new EndlessScrollListener() {
                                @Override
                                public void onLoadMore(int page, int totalItemsCount) {
                                    new LoadMoreClientTask(progressBar, FragmentClientes.this, ad, getActivity()).execute(page);
                                    System.out.println("PAGE " + page);
                                }
                            });

                            lv.setAdapter(ads);
                            new LoadMoreClientTask(progressBar, this, ad, getActivity()).execute(1);


                            System.out.println("Pesquisa: " + clientes);


                        }catch (Exception e){
                            e.printStackTrace();
                        }

                    }
                    return false;
                }

这篇关于Android的搜索查看OnQueryTextListener与数据库不工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆