- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试使用 SearchView 搜索项目,但我不知道为什么我找不到可能的方法,你能帮助我吗?
FragGridCampos.java
public class FragGridCampos extends Fragment implements SearchView.OnQueryTextListener{
//Creating a List of jornadas
private List<Estadisticas> listJornadas;
//Creating Views
private RecyclerView recyclerView;
private RecyclerView.LayoutManager layoutManager;
private RecyclerView.Adapter adapter;
private List<Estadisticas> mCountryModel;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
final View view = inflater.inflate( R.layout.campos_list_todos, null);
setHasOptionsMenu(true);
recyclerView = (RecyclerView) view.findViewById( R.id.recyclerView);
recyclerView.setHasFixedSize(true);
RecyclerView.LayoutManager layoutManager = new GridLayoutManager(getActivity(), 1);
recyclerView.setLayoutManager(layoutManager);
TextView miTexto = (TextView)view.findViewById( R.id.mi_texto);
miTexto.setText("CAMPOS");
//miTexto.setTextColor(color.RED);
listJornadas = new ArrayList<>();
getData();
recyclerView.setAdapter(adapter);
recyclerView.addItemDecoration(new DecoracionLineaDivisoria(getActivity()));
/*ImageButton fabButton = (ImageButton) view.findViewById(R.id.fab);
fabButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//startActivity(new Intent(getActivity(), MainActivity2.class));
Toast.makeText(getActivity(),"Proximamente",Toast.LENGTH_SHORT).show();
}
});*/
return view;
}
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_buscar, menu);
final MenuItem searchItem = menu.findItem(R.id.action_search);
final SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
searchView.setOnQueryTextListener(this);
}
//This method will get data from the web api
private void getData(){
//Showing a progress dialog
final ProgressDialog loading = ProgressDialog.show(getActivity(),"Cargando datos", "Por favor espere...",false,false);
//Creating a json array request
JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(ConfigAmaters.CAMPOS,
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
//Dismissing progress dialog
loading.dismiss();
//calling method to parse json array
parseData(response);
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
//Creating request queue
RequestQueue requestQueue = Volley.newRequestQueue(getActivity());
//Adding request to the queue
requestQueue.add(jsonArrayRequest);
}
//This method will parse json data
private void parseData(JSONArray array){
for(int i = 0; i<array.length(); i++) {
Estadisticas campo = new Estadisticas();
JSONObject json = null;
try {
json = array.getJSONObject(i);
campo.setNombre_campo(json.getString("nombre_campo"));
campo.setPoblacion(json.getString("poblacion"));
campo.setEquipo(json.getString("equipo"));
campo.setTelefono(json.getString("telefono"));
campo.setGeo(json.getString("geo"));
campo.setUrl(json.getString("url"));
campo.setEmail(json.getString("email"));
campo.setEscudo(json.getString("escudo"));
} catch (JSONException e) {
e.printStackTrace();
}
listJornadas.add(campo);
}
//Finally initializing our adapter
adapter = new Campos_Adapter(listJornadas, getActivity());
//Adding adapter to recyclerview
recyclerView.setAdapter(adapter);
}
private LayoutInflater getMenuInflater() {
return null;
}
@Override
public boolean onQueryTextChange(String newText) {
final List<Estadisticas> filteredModelList = filter(mCountryModel, newText);
adapter.setFilter(filteredModelList);
return true;
}
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
private List<Estadisticas> filter(List<Estadisticas> models, String query) {
query = query.toLowerCase();final List<Estadisticas> filteredModelList = new ArrayList<>();
for (Estadisticas model : models) {
final String text = model.getPoblacion().toLowerCase();
if (text.contains(query)) {
filteredModelList.add(model);
}
}
return filteredModelList;
}
}
Campos_Adapter.java
private ImageLoader imageLoader;
private Context context;
List<Estadisticas> estadisticas;
public Campos_Adapter(List<Estadisticas> estadisticas, Context context) {
super();
this.estadisticas = estadisticas;
this.context = context;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from( parent.getContext() ).inflate( R.layout.campos_row, parent, false );
ViewHolder viewHolder = new ViewHolder( v );
return viewHolder;
}
public void onBindViewHolder(ViewHolder holder, final int position) {
holder.root.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View view) {
//Toast.makeText(context, "this is my Toast message!!! =)",
//Toast.LENGTH_LONG).show();
//Toast.makeText(context, estadisticas.get(position).getNombrePlato(), Toast.LENGTH_SHORT).show();
Intent intent= new Intent(context, DetailCampos.class);
intent.putExtra("Poblacion", estadisticas.get(position).getPoblacion());
intent.putExtra("Nombre_campo", estadisticas.get(position).getNombre_campo());
intent.putExtra("Nombre", estadisticas.get(position).getEquipo());
intent.putExtra("Telefono", estadisticas.get(position).getTelefono());
intent.putExtra("Geo", estadisticas.get(position).getGeo());
intent.putExtra("Email", estadisticas.get(position).getEmail());
intent.putExtra("Url", estadisticas.get(position).getUrl());
intent.putExtra("Imagen", estadisticas.get(position).getEscudo());
context.startActivity(intent);
Estadisticas estadisticas1 = estadisticas.get(getAdapterPosition());
}
private int getAdapterPosition() {
return 0;
}
} );
Estadisticas campos = estadisticas.get( position );
imageLoader = DecoracionLineaDivisoria.CustomVolleyRequest.getInstance(context ).getImageLoader();
imageLoader.get(campos.getEscudo(), ImageLoader.getImageListener(holder.escudo_local, R.mipmap.ic_launcher, android.R.drawable.ic_dialog_alert ) );
holder.textViewEquipo_Local.setText( campos.getEquipo() );
holder.textViewPoblacion.setText( campos.getPoblacion() );
//holder.escudo_local.setImageUrl( campos.getImagenPlato(), imageLoader );
}
@Override
public int getItemCount() {
return estadisticas.size();
}
class ViewHolder extends RecyclerView.ViewHolder {
public ImageView escudo_local;
public TextView textViewEquipo_Local;
public TextView textViewPoblacion;
public View root;
public ViewHolder(View itemView) {
super( itemView );
root = itemView;
escudo_local = (ImageView) itemView.findViewById( R.id.tv_esc_local );
textViewEquipo_Local = (TextView) itemView.findViewById( R.id.tv_ek_local );
textViewPoblacion = (TextView) itemView.findViewById( R.id.tv_poblacion );
}
}
public void setFilter(List<Estadisticas> countryModels) {
estadisticas = new ArrayList<>();
estadisticas.addAll(countryModels);
notifyDataSetChanged();
}
}
行内 *adapter.setFilter(filteredModelList);
setFilter 为红色。
我的错误是 *Error:(182, 16) 错误:找不到符号方法 setFilter(List)
最佳答案
1.不要将适配器声明为:
private RecyclerView.Adapter adapter;
用途:
private Campos_Adapter adapter;
2. 此外,从 onCreateView()
初始化适配器,并从 parseData()
方法使用 adapter.notifyDataSetChanged()
。
更新onCreateView()
和parseData()
如下:
//Creating a List of jornadas
private List<Estadisticas> listJornadas;
//Creating Views
private RecyclerView recyclerView;
private RecyclerView.LayoutManager layoutManager;
private Campos_Adapter adapter;
private List<Estadisticas> mCountryModel;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
...........
...................
listJornadas = new ArrayList<Estadisticas>();
adapter = new Campos_Adapter(listJornadas, getActivity());
recyclerView.setAdapter(adapter);
recyclerView.addItemDecoration(new DecoracionLineaDivisoria(getActivity()));
getData();
.........
.............
return view;
}
//This method will parse json data
private void parseData(JSONArray array){
for(int i = 0; i<array.length(); i++) {
Estadisticas campo = new Estadisticas();
JSONObject json = null;
try {
json = array.getJSONObject(i);
campo.setNombre_campo(json.getString("nombre_campo"));
campo.setPoblacion(json.getString("poblacion"));
campo.setEquipo(json.getString("equipo"));
campo.setTelefono(json.getString("telefono"));
campo.setGeo(json.getString("geo"));
campo.setUrl(json.getString("url"));
campo.setEmail(json.getString("email"));
campo.setEscudo(json.getString("escudo"));
} catch (JSONException e) {
e.printStackTrace();
}
listJornadas.add(campo);
adapter.notifyDataSetChanged();
}
}
更新:
java.lang.NullPointerException: Attempt to invoke interface method 'java.util.Iterator java.util.List.iterator()' on a null object reference at com.ramon.campos.Campos.FragGridCampos.filter(FragGridCampos.java:185)
您的mCountryModel
为空。你还没有初始化它。在 onQueryTextChange()
中尝试以下代码:
@Override
public boolean onQueryTextChange(String newText) {
mCountryModel.addAll(listJornadas);
final List<Estadisticas> filteredModelList = filter(mCountryModel, newText);
adapter.setFilter(filteredModelList);
return true;
}
关于java - SearchView.OnQueryTextListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44342549/
我的 Activity 的主要内容区域中有一个 SearchView。 我需要覆盖我的 style.xml 文件中的 SearchView 样式(这样我就可以删除 SearchView 的下划线 -
我正在使用 Firebase-UI 的 FirebaseRecyclerAdapter。我无法在 SearchView 中实现过滤器。 我的数据库: 我的问题: 如何使用 FirebaseRecycl
我正在尝试以编程方式删除 SearchView 提示中的图标所占用的空间,但由于某种原因它不会消失。 此代码使图标不可见,但不会删除空格: try { Field mDrawa
我想在用户未输入任何内容时在 SearchView 中显示一些默认建议。我正在使用矩阵光标手动设置我的自定义建议适配器。我尝试在 onFocusChange 和 onClickListner 中设置适
如何删除或更改编辑文本中的搜索 View 图标?我正在使用 Appcompat 库。 我使用下面的代码修改和删除但它不起作用: SearchManager searchManager = (Searc
当我启动我的应用程序时,会引发以下错误: E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.app, PID: 5513 jav
在我的应用程序中使用 SearchView。 无论如何我可以延迟对 onQueryTextChange() 方法的调用。例如,当用户键入一系列字符时,他必须等待此方法被调用。 此等待应该不取决于键入的
我正在尝试从 Fragment 中的工具栏获取我的 SearchView。 我在 onCreateOptionsMenu 中引入了一个菜单项。 问题:searchItem.getActionView(
我不确定为什么会收到此错误。这是有问题的菜单: 这是根据 developer guide 的可搜索配置. 添加到我的 list 文件中: 我在新的搜索 Activity 中也有一个
我是一名开发 Android 应用程序的新手,以下是该应用程序的第一个屏幕。我希望我的应用程序使用该搜索对话框执行搜索。 为此,我关注了http://developer.android.com/gui
我正在 CustomAdapter 上执行 SearchView,它将在其中搜索门名称。在我尝试运行该应用程序后,它突然崩溃并给我如上所述的错误。我不知道我什至做错了哪一部分导致我每次尝试运行我的应用
您好,我需要在 searchView 中放置一些文本并聚焦/展开 searchView 小部件。 这是我尝试过的,但它不起作用 @Override public boolean onCreateOpt
所以当我遇到错误“无法解析类 SearchView”时,我试图在我的应用程序中包含一个搜索栏。谷歌没有帮助,所以我来到这里。这是我的代码: 其余的 xml 已正确完成,我直接从 android 获取
我的搜索 View 有问题。 我有 2 个主题,当我第一次接触 searchview 时,我得到了丑陋的第一张图片。但是当我再次进入搜索 View 时,我从第二张图片中得到了很好的主题。 我总是想走第
我使用的不是 menuItem 而是布局中的搜索 View 。我支持的最低 API 级别是 9,搜索 View 是 11。 现在我这样创建了我的搜索 View : 在直线布局中。我注意到警告,所以
我在 here 中解决了我的问题之后当我在搜索框中输入文本时,搜索过滤器仍然不起作用。 这是我的代码: package intikom.streammobile.Customer; import an
我正在创建类似于屏幕上的 Activity 。我在工具栏中阅读了许多关于 SearchView 的教程,并在我的 Activity 中实现了它并且它有效(上面的代码)。但是如何制作这个下拉列表呢?感谢
我按照 Android 的官方说明在工具栏中实现了 SearchView。 SearchView 本身工作得很好,但是当我点击搜索图标时,它会向左移动,而不是显示搜索提示和关闭按钮,尽管如果我单击这个
Android Studio 3.2.1 在我的app / build.gradle中: android { compileSdkVersion 28 defaultConfig {
我有一个 RecylerView,它有 SearchView 小部件和包含复选框和玩家名称的项目列表。当我滚动项目并选择项目复选框时没有问题。但是,当我通过名称搜索项目然后选择它们时,就会出现问题,当
我是一名优秀的程序员,十分优秀!