搜索文本不适用于listview ie
addTextChangedlistener返回错误,请帮助。我有一个Addportfolio.java文件加载列表对话框,它来自listview的另一个xml。listview xml具有搜索文本和listview字段 AddPortfolio.java搜索文本不适用于listview ie,listview,search,Listview,Search,addTextChangedlistener返回错误,请帮助。我有一个Addportfolio.java文件加载列表对话框,它来自listview的另一个xml。listview xml具有搜索文本和listview字段 AddPortfolio.java import java.util.ArrayList; import android.app.Activity; import android.app.Dialog; import android.content.Context; impor
import java.util.ArrayList;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.database.Cursor;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
public class AddPortfolio extends Activity implements OnItemClickListener {
ListView list;
Dialog listDialog;
DBAdapter myDb;
private ArrayAdapter adapter;
ArrayList nameList = new ArrayList();
private ArrayList<String> array_search= new ArrayList<String>();
int textlength=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.add_portfolio);
myDb = new DBAdapter(this);
myDb.open();
Cursor cursor = myDb.getAllRows();
if (cursor.moveToFirst()) {
do {
// Process the data:
String name = cursor.getString(1);
nameList.add(name);
} while(cursor.moveToNext());
}
// Close the cursor to avoid a resource leak.
cursor.close();
}
public void addlist(View v){
showdialog();
}
private void showdialog()
{
listDialog = new Dialog(AddPortfolio.this);
listDialog.setTitle("Select Company");
LayoutInflater li = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = li.inflate(R.layout.listviewdisplay, null, false);
listDialog.setContentView(v);
listDialog.setCancelable(true);
//there are a lot of settings, for dialog, check them all out!
list = (ListView) listDialog.findViewById(R.id.listview);
list.setOnItemClickListener((OnItemClickListener) this);
//list1.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, nameList));
//now that the dialog is set up, it's time to show it
adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, nameList);
list.setAdapter(adapter);
listDialog.show();
EditText st= (EditText) findViewById(R.id.editText1);
st.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
AddPortfolio.this.adapter.getFilter().filter(cs);
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub
Log.i("REACHES BEFORE", "YES");
}
@Override
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub
}
});
}
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3)
{
EditText edittext1=(EditText) findViewById(R.id.add_company);
edittext1.setText((CharSequence) nameList.get(arg2));
listDialog.cancel();
}
}
02-19 02:24:26.484:D/AndroidRuntime(1487):关闭虚拟机
02-19 02:24:26.484:W/dalvikvm(1487):threadid=1:线程以未捕获异常退出(组=0xb3afeba8)
02-19 02:24:26.584:E/AndroidRuntime(1487):致命异常:主
02-19 02:24:26.584:E/AndroidRuntime(1487):进程:com.example.merostock,PID:1487
02-19 02:24:26.584:E/AndroidRuntime(1487):java.lang.IllegalStateException:无法执行活动的方法
02-19 02:24:26.584:E/AndroidRuntime(1487):在android.view.view$1.onClick(view.java:3823)
02-19 02:24:26.584:E/AndroidRuntime(1487):在android.view.view.performClick(view.java:4438)
02-19 02:24:26.584:E/AndroidRuntime(1487):在android.view.view$PerformClick.run(view.java:18422)
02-19 02:24:26.584:E/AndroidRuntime(1487):在android.os.Handler.handleCallback(Handler.java:733)
02-19 02:24:26.584:E/AndroidRuntime(1487):位于android.os.Handler.dispatchMessage(Handler.java:95)
02-19 02:24:26.584:E/AndroidRuntime(1487):在android.os.Looper.loop(Looper.java:136)上
02-19 02:24:26.584:E/AndroidRuntime(1487):位于android.app.ActivityThread.main(ActivityThread.java:5017)
02-19 02:24:26.584:E/AndroidRuntime(1487):位于java.lang.reflect.Method.Invokenactive(本机方法)
02-19 02:24:26.584:E/AndroidRuntime(1487):位于java.lang.reflect.Method.invoke(Method.java:515)
02-19 02:24:26.584:E/AndroidRuntime(1487):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
02-19 02:24:26.584:E/AndroidRuntime(1487):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
02-19 02:24:26.584:E/AndroidRuntime(1487):在dalvik.system.NativeStart.main(本机方法)
02-19 02:24:26.584:E/AndroidRuntime(1487):由以下原因引起:java.lang.reflect.InvocationTargetException
02-19 02:24:26.584:E/AndroidRuntime(1487):位于java.lang.reflect.Method.Invokenactive(本机方法)
02-19 02:24:26.584:E/AndroidRuntime(1487):位于java.lang.reflect.Method.invoke(Method.java:515)
02-19 02:24:26.584:E/AndroidRuntime(1487):在android.view.view$1.onClick(view.java:3818)
02-19 02:24:26.584:E/AndroidRuntime(1487):。。。还有11个
02-19 02:24:26.584:E/AndroidRuntime(1487):由以下原因引起:java.lang.NullPointerException
02-19 02:24:26.584:E/AndroidRuntime(1487):在com.example.merostock.AddPortfolio.showdialog(AddPortfolio.java:77)
02-19 02:24:26.584:E/AndroidRuntime(1487):在com.example.merostock.AddPortfolio.addlist(AddPortfolio.java:53)
02-19 02:24:26.584:E/AndroidRuntime(1487):。。。14多
请检查AddPortfolio.java中的第77行,它会导致NPE我在第77行有此代码:EditText st=(EditText)findViewById(R.id.editText1);st.addTextChangedListener(new TextWatcher(){在布局添加工具组合中是否有id为editText1的EditText?可能EditText在对话框布局中。我在对话框布局ie listviewdisplay.xml中有editText1。它在LayoutFlater li=(LayoutFlater)this.getSystemService(Context.layout\u INFLATER\u服务)中调用;View v=li.inflate(R.layout.listviewdisplay,null,false);EditText st=(EditText)findViewById(R.id.editText1);此行表示您在“活动内容”视图中找到了DViewById,而不是对话框视图,您没有它,因此NPE会导致。请尝试以下操作:EditText st=(EditText)listDialog.findViewById(R.id.editText1);它工作了,但现在又遇到了另一个问题,当我在字段中搜索时,它会在listview中显示同一家公司两次,当我选择它时,它会从原始listview索引返回
02-19 02:24:26.484: D/AndroidRuntime(1487): Shutting down VM