Android 从ItemAdapter筛选listView

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

我正在尝试筛选我的listView。但是,当我在EditText中键入字母时,我的listView变为空。Log.d显示我的m_适配器有0个计数

我在谷歌上搜索过allot,但没有看到任何适合我的解决方案

ItemAdapter:

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) {

}