0

我有一个 EditText 和一个 ListView。ListView 中的项目包含两个 TextView。如果用户在 EditText 中输入内容,我需要过滤 ListView。我的适配器:

public class AdapterUserIsp extends ArrayAdapter{

public static ArrayList<ItemUserIsp> data = new ArrayList<ItemUserIsp>();
Context context;
int ch = 0;

public static TextView header4;
@SuppressWarnings("unchecked")  
public AdapterUserIsp(Context context, int textViewResourceId, ArrayList<ItemUserIsp> arr) {
    super(context, textViewResourceId, arr);
    if (arr != null) {
        data = arr;
    }
    this.context = context;

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

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

@Override
public long getItemId(int arg0) {
    return arg0;
}

@SuppressLint("NewApi")
@Override
public View getView(int i, View someView, ViewGroup arg2) {

    LayoutInflater inflater = LayoutInflater.from(context);
    if (someView == null) {
        someView = inflater.inflate(R.layout.item_user_isp, arg2, false);
    }

    TextView header1 = (TextView) someView.findViewById(R.id.tvUserNameIsp);
    TextView header2 = (TextView) someView.findViewById(R.id.tvUserPositionIsp);
    header1.setText(data.get(i).header1); 
    header2.setText(data.get(i).header2); 

    return someView;
}

}

我的活动:

final ListView lv = (ListView)findViewById(R.id.users);
    final AdapterUserIsp adapter = new AdapterUserIsp(this,R.id.users,data);
final EditText search= (EditText)findViewById(R.id.search);
    search_isp.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            // TODO Auto-generated method stub
            adapter.getFilter().filter(s);
            lv.invalidateViews();
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
            // TODO Auto-generated method stub

        }

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

        }
    });

但它不起作用。为什么?谢谢!

4

2 回答 2

0

在 lv.invalidateViews() 之后插入以下行;onTextChanged 方法。

adapter.notifyDataSetChanged();

如果您想覆盖过滤器方法,您还必须从 Filterable 实现您的适配器类。

如果适配器.notifyDataSetChanged(); 不起作用,不要使用 final 作为适配器,在 onTextChanged 中获取适配器,然后过滤你的文本。

YourAdapterOrWhateverAdapter adapter = (YourAdapterOrWhateverAdapter) listView.getAdapter();  
adapter.getFilter().filter(s);
adapter.notifyDataSetChanged();

注意:这只是猜测..

于 2013-07-17T05:46:38.877 回答
0

您必须更新您的适配器。

如果您只是将一些新项目添加到您的列表 arr 中,您必须调用:

adapter.notifyDataSetChanged();

如果要重绘所有项目,可以再次设置适配器:

lv.setAdapter(adapter);

希望对你有帮助 :)

于 2013-07-17T06:00:10.293 回答