Android的搜索查看OnQueryTextListener与数据库不工作 [英] Android Searchview OnQueryTextListener with database not working
本文介绍了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){
searchView.setOnQueryTextListener(新SearchView.OnQueryTextListener(){ 公共布尔onQueryTextSubmit(字符串提交){
showResults(提交);
返回false; } 公共布尔onQueryTextChange(字符串变化){ // TODO自动生成方法存根 showResults(变化);
返回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(真); searchCheck =真;
} 公共布尔的OnClose(){
showResults();
返回false;
} @覆盖
公共布尔onOptionsItemSelected(菜单项项){
// TODO自动生成方法存根 开关(item.getItemId()){ 案例Menus.PROCURAR:
searchCheck =真;
打破;
}
返回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屋!
查看全文