【问题标题】:search text not working for listview ie搜索文本不适用于列表视图,即
【发布时间】:2014-02-19 07:26:30
【问题描述】:

addTextChangedlistener 返回错误,请帮忙。我有来自另一个 xml 的 Addportfolio.java 文件加载列表对话框,用于列表视图。 listview xml 有搜索文本和 listview 字段

AddPortfolio.java

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();   
    }
    }

Logcat 错误

   02-19 02:24:26.484: D/AndroidRuntime(1487): Shutting down VM

02-19 02:24:26.484: D/AndroidRuntime(1487): Shutting down VM 02-19 02:24:26.484: W/dalvikvm(1487): threadid=1: thread exiting with uncaught exception (group=0xb3afeba8) 02-19 02:24:26.584: E/AndroidRuntime(1487): FATAL EXCEPTION: main 02-19 02:24:26.584: E/AndroidRuntime(1487): Process: com.example.merostock, PID: 1487 02-19 02:24:26.584: E/AndroidRuntime(1487): java.lang.IllegalStateException: Could not execute method of the activity 02-19 02:24:26.584: E/AndroidRuntime(1487): at android.view.View$1.onClick(View.java:3823) 02-19 02:24:26.584: E/AndroidRuntime(1487): at android.view.View.performClick(View.java:4438) 02-19 02:24:26.584: E/AndroidRuntime(1487): at android.view.View$PerformClick.run(View.java:18422) 02-19 02:24:26.584: E/AndroidRuntime(1487): at android.os.Handler.handleCallback(Handler.java:733) 02-19 02:24:26.584: E/AndroidRuntime(1487): at android.os.Handler.dispatchMessage(Handler.java:95) 02-19 02:24:26.584: E/AndroidRuntime(1487): at android.os.Looper.loop(Looper.java:136) 02-19 02:24:26.584: E/AndroidRuntime(1487): at android.app.ActivityThread.main(ActivityThread.java:5017) 02-19 02:24:26.584: E/AndroidRuntime(1487): at java.lang.reflect.Method.invokeNative(Native Method) 02-19 02:24:26.584: E/AndroidRuntime(1487): at java.lang.reflect.Method.invoke(Method.java:515) 02-19 02:24:26.584: E/AndroidRuntime(1487): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 02-19 02:24:26.584: E/AndroidRuntime(1487): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 02-19 02:24:26.584: E/AndroidRuntime(1487): at dalvik.system.NativeStart.main(Native Method) 02-19 02:24:26.584: E/AndroidRuntime(1487): Caused by: java.lang.reflect.InvocationTargetException 02-19 02:24:26.584: E/AndroidRuntime(1487): at java.lang.reflect.Method.invokeNative(Native Method) 02-19 02:24:26.584: E/AndroidRuntime(1487): at java.lang.reflect.Method.invoke(Method.java:515) 02-19 02:24:26.584: E/AndroidRuntime(1487): at android.view.View$1.onClick(View.java:3818) 02-19 02:24:26.584: E/AndroidRuntime(1487): ... 11 more 02-19 02:24:26.584: E/AndroidRuntime(1487): Caused by: java.lang.NullPointerException 02-19 02:24:26.584: E/AndroidRuntime(1487): at com.example.merostock.AddPortfolio.showdialog(AddPortfolio.java:77) 02-19 02:24:26.584: E/AndroidRuntime(1487): at com.example.merostock.AddPortfolio.addlist(AddPortfolio.java:53) 02-19 02:24:26.584: E/AndroidRuntime(1487): ... 14 more

【问题讨论】:

    标签: listview search


    【解决方案1】:

    请检查 AddPortfolio.java 中的第 77 行,它会导致 NPE

    【讨论】:

    • 我在第 77 行有这个代码: EditText st= (EditText) findViewById(R.id.editText1); st.addTextChangedListener(new TextWatcher() {
    • 您的布局 add_portfolio 中是否有 ID 为 editText1 的 EditText?也许 EditText 在您的对话框布局中。
    • 我在对话框布局中有editText1,即listviewdisplay.xml。在 LayoutInflater 中调用 li = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);视图 v = li.inflate(R.layout.listviewdisplay, null, false);
    • EditText st= (EditText) findViewById(R.id.editText1);这行意味着您在活动内容视图中findViewById,而不是对话框视图,您没有它,因此NPE导致。试试这个:EditText st= (EditText) listDialog.findViewById(R.id.editText1);
    • 它工作了,但现在又遇到了另一个问题,当我在该字段中搜索时,它在列表视图中显示同一家公司两次,当我选择它时,它从原始列表视图索引返回
    猜你喜欢
    • 2016-10-30
    • 1970-01-01
    • 1970-01-01
    • 2011-09-11
    • 2021-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多