我遇到了问题,我学会了如何使用带有文本的SearchView,但我有一个Activity,其中listView有图像和文本,但我找不到显示过滤器的方法。
所以,我调试代码是为了理解为什么会这样,我在LogCat中得到了这个:
java.lang.RuntimeException:无法启动活动ComponentInfo {mundo.hola.app.frank.com.universidad2 / mundo.hola.app.frank.com.universidad2.RankingActividad}:java.lang.NullPointerException:Attempt to在空对象引用上调用虚方法'void android.widget.SearchView.setOnQueryTextListener(android.widget.SearchView $ OnQueryTextListener)'
代码编译得很好,但当我尝试通过Intent访问此活动时,应用程序崩溃了。
如果有人可以帮助我,我会很高兴。
活性
<?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>
item_list
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/layout1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorBlanco"
android:foreground="?attr/selectableItemBackground"
android:orientation="vertical"
android:paddingBottom="8dp"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="8dp">
<ImageView
android:id="@+id/imagenR"
android:layout_width="45dp"
android:layout_height="45dp"
android:layout_centerVertical="true" />
<TextView
android:id="@+id/tv_nombreUR"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="false"
android:layout_marginLeft="56dp"
android:layout_marginStart="65dp"
android:textColor="@android:color/black"
tools:text="NombreU" />
<TextView
android:id="@+id/tv_PuntajeR"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/tv_nombreUR"
android:layout_alignStart="@+id/tv_nombreUR"
android:layout_below="@+id/tv_nombreUR"
tools:text="Puntaje" />
<TextView
android:id="@+id/tv_NpuntajeR"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/tv_PuntajeR"
android:layout_alignParentBottom="false"
android:layout_alignStart="@+id/tv_PuntajeR"
android:layout_alignWithParentIfMissing="false"
android:layout_below="@+id/tv_PuntajeR"
android:textColor="@android:color/holo_red_dark"
tools:text="11223344" />
</RelativeLayout>
班级排名
public class Ranking {
private int Id;
private String Titulo;
private String Puntaje;
private String NPuntaje;
private int Imagen;
public Ranking(int id, String titulo, String puntaje, String NPuntaje, int imagen) {
Id = id;
Titulo = titulo;
Puntaje = puntaje;
this.NPuntaje = NPuntaje;
Imagen = imagen;
}
public int getId() {
return Id;
}
public void setId(int id) {
Id = id;
}
public String getTitulo() {
return Titulo;
}
public void setTitulo(String titulo) {
Titulo = titulo;
}
public String getPuntaje() {
return Puntaje;
}
public void setPuntaje(String puntaje) {
Puntaje = puntaje;
}
public String getNPuntaje() {
return NPuntaje;
}
public void setNPuntaje(String NPuntaje) {
this.NPuntaje = NPuntaje;
}
public int getImagen() {
return Imagen;
}
public void setImagen(int imagen) {
Imagen = imagen;
}
}
活动类
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;
}
});
适配器类
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();
}}
答案 0 :(得分:0)
sv.setOnQueryTextListener(new Sear...
你从未初始化过sv,所以它是null。加上这个:
sv = (SearchView) findViewById(R.id.search_tecnico);