繁体   English   中英

列表视图中的搜索功能

[英]search function in list view

我正在尝试在列表视图中进行搜索

public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
  System.out.println("Text ["+cs+"]");
  MainActivity.this.adapter.getFilter().filter(cs.toString());
}

当我尝试输入要搜索的内容时出现此错误。 任何帮助,不胜感激。 先感谢您。

sendUserActionEvent() mView == null
FATAL EXCEPTION: main
java.lang.NullPointerException
at com.conic.example.MainActivity$1.onTextChanged(MainActivity.java:87)
at android.widget.TextView.sendOnTextChanged(TextView.java:8485)
at android.widget.TextView.handleTextChanged(TextView.java:8546)
at android.widget.TextView$ChangeWatcher.onTextChanged(TextView.java:10622)
at android.text.SpannableStringBuilder.sendTextChanged(SpannableStringBuilder.java:962)
at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:496)
at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:435)
at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:30)
at android.view.inputmethod.BaseInputConnection.replaceText(BaseInputConnection.java:677)
at android.view.inputmethod.BaseInputConnection.commitText(BaseInputConnection.java:197)
at com.android.internal.widget.EditableInputConnection.commitText(EditableInputConnection.java:183)
at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:279)
at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:77)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:176)
at android.app.ActivityThread.main(ActivityThread.java:5419)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862)
at dalvik.system.NativeStart.main(Native Method)

尝试这个,

ReadListAdapter.java

public class ReaderListAdapter extends BaseAdapter {
ArrayList<Reader> listReader = new ArrayList<Reader>();
ArrayList<Reader> arrayList;
LayoutInflater layoutInflater;
Context context;
int lastPosition = -1;

// constructeur
public ReaderListAdapter(Context context, ArrayList<Reader> listReader) {
this.listReader = listReader;
this.context = context;
arrayList = new ArrayList<Reader> ();
layoutInflater = LayoutInflater.from(this.context);
arrayList.addAll(listReader);   
}   

@Override
public int getCount() {
// TODO Auto-generated method stub
return listReader.size();
}

@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return listReader.get(position);
}

@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return arg0;
}

static class ViewHolder {
TextView nomView;
TextView priceView;
ImageView pictureView;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;

if (convertView == null) {
    convertView = layoutInflater.inflate(R.layout.reader_row, null);
    holder = new ViewHolder();
    // initialisation des vues
    holder.nomView = (TextView) convertView.findViewById(R.id.name);
    holder.priceView = (TextView) convertView.findViewById(R.id.price);
    holder.pictureView = (ImageView) convertView.findViewById(R.id.picture);

    convertView.setTag(holder);
} else {
    holder = (ViewHolder) convertView.getTag();
}
// affchier les données convenablement dans leurs positions
  holder.nomView.setText(listReader.get(position).getName());
     holder.priceView.setText(String.valueOf(listReader.get(position).getPrice()));
     holder.pictureView.setBackgroundDrawable(listReader.get(position).getPicture());

// changer R.anim.ton_effet
Animation animation = AnimationUtils.loadAnimation(context,(position > lastPosition)
                      ? R.anim.up_from_bottom: R.anim.up_from_bottom);
convertView.startAnimation(animation);
position=lastPosition;
return convertView;
}

// Filter Class
public void filter(String charText) {
// arrayList = new ArrayList<Reader>();
charText = charText.toLowerCase(Locale.getDefault());
listReader.clear();
if(charText.length()==0){
    listReader.addAll(arrayList);
}
else{
    for (Reader c : arrayList) {
        if (c.getName().toLowerCase(Locale.getDefault()).contains(charText)) 
            listReader.add(c);
    }
}
notifyDataSetChanged();
}}

MainActivity.java:

 public class MainActivity extends Activity {

String[] listNames = {"Site1","Site2","Site3" };

int[] listPrices = { 1, 2, 3 };

ArrayList<Reader> listReader = new ArrayList<Reader>();
ArrayList<Reader> listReaderNew;
ListView lv;
EditText search;
ReaderListAdapter adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);
    lv = (ListView) findViewById(R.id.listReader);
    search = (EditText) findViewById(R.id.search);
    Drawable[] listPictures = {getResources().getDrawable(R.drawable.a1),
                               getResources().getDrawable(R.drawable.a2),
                               getResources().getDrawable(R.drawable.a3)};

    for (int i = 0; i < listPictures.length; i++) {
        listReader.add(new Reader(i + 1, listNames[i], listPictures[i], listPrices[i]));
    }

    adapter=new ReaderListAdapter(getApplicationContext(), listReader);
    lv.setAdapter(adapter); 

    //lv.setAdapter(new ReaderListAdapter(getApplicationContext(), listReader));
    search.addTextChangedListener(new TextWatcher() {
        @Override
    public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
            // TODO Auto-generated method stub  
            String text = search.getText().toString().toLowerCase(Locale.getDefault());
            MainActivity.this.adapter.filter(text);
        }

        @Override
        public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
            // TODO Auto-generated method stub
        }

        @Override
        public void afterTextChanged(Editable arg0) {
            // TODO Auto-generated method stub  

        }});    

        lv.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) 
        {
            Intent intent=new Intent(MainActivity.this,WebActivity.class);

            switch (position) {
            case 0:                
                intent.setData(Uri.parse("http://www.google.com/")) ;break;     
            case 1:
                intent.setData(Uri.parse("http://www.yahoo.com")) ;break;        
            case 2:
                intent.setData(Uri.parse("http://www.kooora.com")) ;break;               
             }
            if (intent != null) {startActivity(intent);}
        }});}}

Reader.java:

public class Reader {
int id;
String name;
Drawable picture;
int price;

public Reader(int id, String name, Drawable picture, int price) {
    super();
    this.id = id;
    this.name = name;
    this.picture = picture;
    this.price = price;
}

public Reader() {
    super();
}

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public Drawable getPicture() {
    return picture;
}

public void setPicture(Drawable picture) {
    this.picture = picture;
}

public int getPrice() {
    return price;
}

public void setPrice(int price) {
    this.price = price;
}

@Override
public String toString() {
    return "Food [id=" + id + ", name=" + name + ", picture=" + picture
            + ", price=" + price + "]";
}
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM