Android 从ItemAdapter筛选listView
我正在尝试筛选我的listView。但是,当我在EditText中键入字母时,我的listView变为空。Log.d显示我的m_适配器有0个计数 我在谷歌上搜索过allot,但没有看到任何适合我的解决方案 ItemAdapter:Android 从ItemAdapter筛选listView,android,listview,arraylist,Android,Listview,Arraylist,我正在尝试筛选我的listView。但是,当我在EditText中键入字母时,我的listView变为空。Log.d显示我的m_适配器有0个计数 我在谷歌上搜索过allot,但没有看到任何适合我的解决方案 ItemAdapter: public class ItemAdapter extends ArrayAdapter<Item> { static ArrayList<Item> objects; public ItemAdapter(Context context
public class ItemAdapter extends ArrayAdapter<Item> {
static ArrayList<Item> objects;
public ItemAdapter(Context context, int textViewResourceId, ArrayList<Item> objects) {
super(context, textViewResourceId, objects);
this.objects = objects;
}
public View getView(int position, View convertView, ViewGroup parent){
View v = convertView;
if (v == null) {
LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(R.layout.phonenumber_item, null);
}
Item i = objects.get(position);
if (i != null) {
TextView ttd = (TextView) v.findViewById(R.id.toptextdata);
TextView btd = (TextView) v.findViewById(R.id.desctext);
if (ttd != null){
ttd.setText(i.getName());
}
if (btd != null){
btd.setText(i.getDetails());
}
}
return v;
}
}
我通过做一些不同的事情来解决它。这是代码。 此github的积分为: PhonenumberSearchNumbers.java
public class PhonenumberSearchNumbers {
public static List<PhonenumberSearchItem> getItems() {
List<PhonenumberSearchItem> m_parts = new ArrayList<PhonenumberSearchItem>();
m_parts.add(new PhonenumberSearchItem("Number 1", "xxx-xxxxx"));
m_parts.add(new PhonenumberSearchItem("Number 2", "xxx-xxxxx"));
m_parts.add(new PhonenumberSearchItem("Number 3", "xxx-xxxxx"));
}
}
MainFragment.java
public class PhonenumberAllaFragment extends ListFragment implements TextWatcher {
private EditText inputSearch;
private static List<PhonenumberSearchItem> numbers = PhonenumberSearchNumbers.getItems();
private EditText editTextFilter;
private PhonenumberSearchAdapter adapter;
只是代码改进的一个小贴士:创建新适配器两次,并将此适配器设置为
ListView
两次,不要这样做。而是在onCreateView()中创建一次,在需要时向数组中添加新项,然后调用adapter。notifyDataSetChanged()
它将在列表视图中反映新数据
public class PhonenumberSearchAdapter extends ArrayAdapter<PhonenumberSearchItem> {
private LayoutInflater vi;
private static int mResource = R.layout.search_item;
public PhonenumberSearchAdapter(Activity activity, final List<PhonenumberSearchItem> items) {
super(activity, mResource, items);
vi = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public static class ViewHolder {
private TextView textViewName;
private TextView textViewNumber;
public ViewHolder(View v) {
this.textViewName = (TextView) v.findViewById(R.id.toptextdata);
this.textViewNumber = (TextView) v.findViewById(R.id.desctext);
}
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = vi.inflate(mResource, null);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
final PhonenumberSearchItem item = getItem(position);
if (item != null) {
holder.textViewName.setText(Html.fromHtml(item.getName()));
holder.textViewNumber.setText(Html.fromHtml(item.getNumber()));
}
return convertView;
}
}
public class PhonenumberSearchItem {
private String name;
private String number;
public PhonenumberSearchItem(String name, String number) {
this.name = name;
this.number = number;
}
public String getNumber() {
return number;
}
public String getName() {
return name;
}
@Override
public String toString() {
return this.name;
}
}
public class PhonenumberAllaFragment extends ListFragment implements TextWatcher {
private EditText inputSearch;
private static List<PhonenumberSearchItem> numbers = PhonenumberSearchNumbers.getItems();
private EditText editTextFilter;
private PhonenumberSearchAdapter adapter;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View rootView = inflater.inflate(R.layout.search_list, container, false);
editTextFilter = (EditText) rootView.findViewById(R.id.inputSearch);
editTextFilter.addTextChangedListener(this);
adapter = new PhonenumberSearchAdapter(getActivity(), numbers);
setListAdapter(adapter);
return rootView;
}
public void onListItemClick(ListView l, View v, final int position, long id) {
super.onListItemClick(l, v, position, id);
PhonenumberSearchItem g = adapter.getItem(position);
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + g.getNumber()));
startActivity(intent);
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
adapter.getFilter().filter(s);
}
@Override
public void afterTextChanged(Editable s) {
}