Java 将SearchView与具有图像和文本的ListView一起使用
我遇到了一个问题,我学会了如何使用带有文本的SearchView,但我有一个活动,其中listView包含图像和文本,但我找不到显示过滤器的方法 因此,我调试代码是为了理解为什么会发生这种情况,我在LogCat中得到: java.lang.RuntimeException:无法启动活动组件信息{mundo.hola.app.frank.com.universida2/mundo.hola.app.frank.com.universida2.RankingActividad}:java.lang.NullPointerException:尝试调用虚拟方法'void android.widget.SearchView.setOnQueryTextListener(android.widget.SearchView$OnQueryTextListener)'在空对象引用上 代码编译得很好,但当我试图通过意图访问此活动时,应用程序崩溃 如果有人能帮助我,我将非常感激 活动Java 将SearchView与具有图像和文本的ListView一起使用,java,android,listview,search,searchview,Java,Android,Listview,Search,Searchview,我遇到了一个问题,我学会了如何使用带有文本的SearchView,但我有一个活动,其中listView包含图像和文本,但我找不到显示过滤器的方法 因此,我调试代码是为了理解为什么会发生这种情况,我在LogCat中得到: java.lang.RuntimeException:无法启动活动组件信息{mundo.hola.app.frank.com.universida2/mundo.hola.app.frank.com.universida2.RankingActividad}:java.lang.
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical">
<android.support.design.widget.AppBarLayout
android:id="@+id/appbarLayout_po"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<android.support.v7.widget.Toolbar
android:id="@+id/appbar_rank"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/colorPrimary"
android:minHeight="?attr/actionBarSize"
>
<ImageView
android:id="@+id/home_rank"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_margin="5dp"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:scaleType="center"
tools:ignore="ContentDescription"
android:src="@drawable/ic_first_page_24dp" />
<SearchView
android:id="@+id/search_tecnico"
android:layout_width="match_parent"
android:layout_height="match_parent">
<requestFocus />
</SearchView>
</android.support.v7.widget.Toolbar>
</android.support.design.widget.AppBarLayout>
<ListView
android:id="@+id/rankinglista"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
</android.support.design.widget.CoordinatorLayout>
活动课
public class RankingActividad extends AppCompatActivity {
ImageView inicio1;
SearchView sv;
Toolbar toolbar1;
ListView listadatos;
ArrayList<Ranking> Lista;
@Override
public void onBackPressed() {
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.ranking_actividad);
inicio1 = (ImageView) findViewById(R.id.home_rank);
sv = (SearchView) findViewById(R.id.search);
toolbar1 = (Toolbar) findViewById(R.id.appbar_rank);
listadatos = (ListView) findViewById(R.id.rankinglista);
Lista = new ArrayList<Ranking>();
Lista.add(new Ranking(1,"Universidad 1","Puntaje","4512",R.drawable.ufps));
Lista.add(new Ranking(2,"universidad 2","Puntaje","4512",R.drawable.unip));
Lista.add(new Ranking(3,"universidad 3","Puntaje","4512",R.drawable.ufps));
Lista.add(new Ranking(4,"universidad 4","Puntaje","4512",R.drawable.ufps));
final RankingAdaptador rankingAdaptador = new RankingAdaptador(getApplicationContext(),Lista);
listadatos.setAdapter(rankingAdaptador);
sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String s) {
return false;
}
@Override
public boolean onQueryTextChange(String s) {
if(TextUtils.isEmpty(s)){
rankingAdaptador.filter("");
listadatos.clearTextFilter();
}else{
String texto = s;
rankingAdaptador.filter(s);
}
return true;
}
});
公共类RankingActividad扩展了AppCompatActivity{
ImageView inicio1;
SearchView sv;
工具栏工具栏1;
ListView listadatos;
ArrayList Lista;
@凌驾
public void onBackPressed(){
}
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.ranking_actividad);
inicio1=(ImageView)findViewById(R.id.home\u秩);
sv=(SearchView)findviewbyd(R.id.search);
toolbar1=(Toolbar)findViewById(R.id.appbar\u rank);
listadatos=(ListView)findViewById(R.id.rankinglista);
Lista=新的ArrayList();
列表A.add(新排名(1,“第一大学”、“蓬塔耶”、“4512”、R.drawable.ufps);
列表A.add(新排名(2,“第二大学”、“Puntaje”、“4512”、R.drawable.unip));
列表A.add(新排名(3,“第三大学”、“Puntaje”、“4512”、R.drawable.ufps));
列表A.add(新排名(4,“第四大学”、“蓬塔耶”、“4512”、R.drawable.ufps));
最终RankingAdapter RankingAdapter=新RankingAdapter(getApplicationContext(),Lista);
listadatos.setAdapter(RankingAdapter);
sv.setOnQueryTextListener(新的SearchView.OnQueryTextListener(){
@凌驾
公共布尔值onQueryTextSubmit(字符串s){
返回false;
}
@凌驾
公共布尔值onQueryTextChange(字符串s){
如果(TextUtils.isEmpty){
RankingAdapter.过滤器(“”);
listadatos.clearTextFilter();
}否则{
字符串texto=s;
RankingAdapter.过滤器;
}
返回true;
}
});
适配器类
public class RankingAdaptador extends BaseAdapter {
Context context;
LayoutInflater inflater;
List<Ranking> ListaObjetos;
private ArrayList<Ranking> arraylist;
public RankingAdaptador(Context context, List<Ranking> listaObjetos) {
this.context = context;
ListaObjetos = listaObjetos;
inflater = LayoutInflater.from(context);
this.arraylist = new ArrayList<Ranking>();
this.arraylist.addAll(ListaObjetos);
}
public class ViewHolder{
TextView mtitulo,mpuntaje,npuntaje;
ImageView mimagen;
}
@Override
public int getCount() {
return ListaObjetos.size(); //retorna la cantidad de elementos de la lista
}
@Override
public Object getItem(int i) {
return ListaObjetos.get(i);
}
@Override
public long getItemId(int i) {
return ListaObjetos.get(i).getId();
}
@Override
public View getView(int position, View view, ViewGroup parent) {
ViewHolder holder;
if (view==null){
holder = new ViewHolder();
view = inflater.inflate(R.layout.ranking_item_lista,null);
// localizar los items de la lista
holder.mimagen = view.findViewById(R.id.imagenR);
holder.mtitulo = view.findViewById(R.id.tv_nombreUR);
holder.mpuntaje = view.findViewById(R.id.tv_PuntajeR);
holder.npuntaje = view.findViewById(R.id.tv_NpuntajeR);
view.setTag(holder);
}else {
holder = (ViewHolder)view.getTag();
}
// setear los textos de la lista
holder.mtitulo.setText(ListaObjetos.get(position).getTitulo());
holder.mpuntaje.setText(ListaObjetos.get(position).getPuntaje());
holder.npuntaje.setText(ListaObjetos.get(position).getNPuntaje());
// setear las imagenes de la lista
holder.mimagen.setImageResource(ListaObjetos.get(position).getImagen());
return null;
}
public void filter(String charText) {
charText = charText.toLowerCase(Locale.getDefault());
ListaObjetos.clear();
if (charText.length() == 0) {
ListaObjetos.addAll(arraylist);
} else {
for (Ranking wp : arraylist) {
if (wp.getTitulo().toLowerCase(Locale.getDefault()).contains(charText)) {
ListaObjetos.add(wp);
}
}
}
notifyDataSetChanged();
}}
公共类RankingAdapter扩展BaseAdapter{
语境;
充气机;
列表对象;
私有ArrayList ArrayList;
公共RankingAdapter(上下文,列表对象){
this.context=上下文;
ListaObjetos=ListaObjetos;
充气器=充气器。从(上下文);
this.arraylist=新的arraylist();
this.arraylist.addAll(ListaObjetos);
}
公共类视图持有者{
TextView mtitulo、mpuntaje、npuntaje;
图像视图mimagen;
}
@凌驾
public int getCount(){
返回ListaObjetos.size();//returna la cantidad de elementos de la lista
}
@凌驾
公共对象getItem(int i){
返回ListaObjetos.get(i);
}
@凌驾
公共长getItemId(int i){
返回ListaObjetos.get(i.getId();
}
@凌驾
公共视图getView(内部位置、视图视图、视图组父视图){
视窗座;
如果(视图==null){
holder=新的ViewHolder();
视图=充气机。充气(R.layout.ranking\u item\u lista,null);
//lista项目的本地化
holder.mimagen=view.findviewbyd(R.id.imagenR);
holder.mtitulo=view.findviewbyd(R.id.tv_nombreUR);
holder.mpuntaje=view.findViewById(R.id.tv_PuntajeR);
holder.npuntaje=view.findViewById(R.id.tv\u NpuntajeR);
视图.设置标签(支架);
}否则{
holder=(ViewHolder)view.getTag();
}
//利斯塔酒店
holder.mtitulo.setText(ListaObjetos.get(position.getitulo());
holder.mpuntaje.setText(ListaObjetos.get(position.getPuntaje());
holder.npuntaje.setText(ListaObjetos.get(position.getNPuntaje());
//利斯塔图片集
setImageResource(ListaObjetos.get(position.getImagen());
返回null;
}
公共空过滤器(字符串图表文本){
charText=charText.toLowerCase(Locale.getDefault());
ListaObjetos.clear();
如果(ChartText.length()==0){
ListaObjetos.addAll(arraylist);
}否则{
对于(排名wp:arraylist){
if(wp.getitulo().toLowerCase(Locale.getDefault()).contains(charText)){
添加(wp);
}
}
}
notifyDataSetChanged();
}}
您从未初始化sv,因此它为空。添加以下内容:
sv = (SearchView) findViewById(R.id.search_tecnico);
public class RankingAdaptador extends BaseAdapter {
Context context;
LayoutInflater inflater;
List<Ranking> ListaObjetos;
private ArrayList<Ranking> arraylist;
public RankingAdaptador(Context context, List<Ranking> listaObjetos) {
this.context = context;
ListaObjetos = listaObjetos;
inflater = LayoutInflater.from(context);
this.arraylist = new ArrayList<Ranking>();
this.arraylist.addAll(ListaObjetos);
}
public class ViewHolder{
TextView mtitulo,mpuntaje,npuntaje;
ImageView mimagen;
}
@Override
public int getCount() {
return ListaObjetos.size(); //retorna la cantidad de elementos de la lista
}
@Override
public Object getItem(int i) {
return ListaObjetos.get(i);
}
@Override
public long getItemId(int i) {
return ListaObjetos.get(i).getId();
}
@Override
public View getView(int position, View view, ViewGroup parent) {
ViewHolder holder;
if (view==null){
holder = new ViewHolder();
view = inflater.inflate(R.layout.ranking_item_lista,null);
// localizar los items de la lista
holder.mimagen = view.findViewById(R.id.imagenR);
holder.mtitulo = view.findViewById(R.id.tv_nombreUR);
holder.mpuntaje = view.findViewById(R.id.tv_PuntajeR);
holder.npuntaje = view.findViewById(R.id.tv_NpuntajeR);
view.setTag(holder);
}else {
holder = (ViewHolder)view.getTag();
}
// setear los textos de la lista
holder.mtitulo.setText(ListaObjetos.get(position).getTitulo());
holder.mpuntaje.setText(ListaObjetos.get(position).getPuntaje());
holder.npuntaje.setText(ListaObjetos.get(position).getNPuntaje());
// setear las imagenes de la lista
holder.mimagen.setImageResource(ListaObjetos.get(position).getImagen());
return null;
}
public void filter(String charText) {
charText = charText.toLowerCase(Locale.getDefault());
ListaObjetos.clear();
if (charText.length() == 0) {
ListaObjetos.addAll(arraylist);
} else {
for (Ranking wp : arraylist) {
if (wp.getTitulo().toLowerCase(Locale.getDefault()).contains(charText)) {
ListaObjetos.add(wp);
}
}
}
notifyDataSetChanged();
}}
sv.setOnQueryTextListener(new Sear...
sv = (SearchView) findViewById(R.id.search_tecnico);