Java 查找器函数不工作,基本适配器调用空指针
这个应用程序有一个用于输入的文本视图和一个调用Finder功能的按钮。查找器将在字符串数组中查找输入文本,然后在列表视图中显示它们。下面是这个场景的代码,语法正确,但在运行时,当我按下按钮时,应用程序崩溃。这里还引用了logcat结果 MainActivity.javaJava 查找器函数不工作,基本适配器调用空指针,java,android,android-studio,listview,Java,Android,Android Studio,Listview,这个应用程序有一个用于输入的文本视图和一个调用Finder功能的按钮。查找器将在字符串数组中查找输入文本,然后在列表视图中显示它们。下面是这个场景的代码,语法正确,但在运行时,当我按下按钮时,应用程序崩溃。这里还引用了logcat结果 MainActivity.java package com.neatsoft.hamqafia; import android.content.Intent; import android.support.v7.app.AppCompatActivity; im
package com.neatsoft.hamqafia;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
EditText textBar;
Button findBtn;
ListView listView;
BaseAdapter adapter;
ArrayList<String> searchList;
String words[] = {"Dust", "Duff", "Great", "Man", "Grade", "Mole", "Tax"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Init();
}
private void Init(){
textBar = (EditText) findViewById(R.id.editText);
findBtn = (Button) findViewById(R.id.button);
listView = (ListView) findViewById(R.id.listView);
}
public void Finder(View view){
String toFind = textBar.getText().toString();
if(searchList == null) {
searchList = new ArrayList<String>();
}
searchList.clear();
if(toFind != null || !toFind.trim().equals("")) {
for(String str : words) {
if(str.toLowerCase().contains(toFind.toLowerCase()))
searchList.add(str);
}
}
notifyDataToListView();
}
private void notifyDataToListView() {
if(adapter == null) {
adapter = new BaseAdapter() {
@Override
public int getCount() {
return searchList == null ? 0 : searchList.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null) {
convertView = new TextView(getApplicationContext());
}
((TextView) convertView).setText(searchList.get(position));
return null;
}
};
listView.setAdapter(adapter);
}else {
adapter.notifyDataSetChanged();
}
}
}
适配器的getView()
正在返回null
值
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null) {
convertView = new TextView(getApplicationContext());
}
((TextView) convertView).setText(searchList.get(position));
return null; // <<<<<< PROBLEM IS HERE
}
甚至其他方法
getItem()
和getItemId()
也没有正确定义。我建议您阅读这些方法以及如何覆盖它们
在那之前,这些方法都是
@Override
public Object getItem(int position) {
if (searchList == null || searchList.isEmpty()) {
return null;
} else {
return searchList.get(position);
}
}
@Override
public long getItemId(int position) {
return position; // Better is to return id field of data if you have
}
由于你们是新来的,我想补充一点,答案也有同样的问题,比如。所以在将来,首先尝试搜索,从已经回答的问题中学习 更改
返回null代码>到返回转换视图代码>谢谢。它起作用了。。。但搜索结果并不正确。我想在这里搜索Regex后缀。比如,如果我输入“st”,它应该显示所有最后包含“st”的单词,比如爆炸、快速、灰尘、地壳、大多数。。。如何修改这个正则表达式的finder函数?@SurrayaMarvi现在显示什么?如果我输入“a”,它会显示所有包含字母“a”的单词。@SurrayaMarvi使用if(str.toLowerCase().endsWith(toFind.toLowerCase())
。将包含的替换为endsWith
是的,这很有帮助。谢谢
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null) {
convertView = new TextView(getApplicationContext());
}
((TextView) convertView).setText(searchList.get(position));
return convertView;
}
@Override
public Object getItem(int position) {
if (searchList == null || searchList.isEmpty()) {
return null;
} else {
return searchList.get(position);
}
}
@Override
public long getItemId(int position) {
return position; // Better is to return id field of data if you have
}