1

ここで質問する前に、このスレッドを見ました。しかし、そのスレッドには単純な文字列配列の例が含まれていますが、私の場合は使用してArrayList<Map<String, String>>いるため、現時点では少し混乱しています。

listviewAndroidアクティビティで複数選択しています。listviewユーザーが一度に複数の電話番号を選択できるように、連絡先のリストを表示するために を使用しています。しかし、今は同じ目的で検索機能を追加したいと考えています。私がやりたいのは、ユーザーが入力EditTextした文字を一番上に配置し、ユーザーの入力に基づいてフィルター処理されたデータを入力することです。私は拡張し、連絡先の詳細に使用しているという名前の POJO クラスを持っています。EditTextListViewCustomAdapterBaseAdapterContactGETSET

マイカスタムアダプター.JAVA

public class MyCustomAdapter extends BaseAdapter {

Context mContext;
private LayoutInflater mInflater;
SparseBooleanArray mSparseBooleanArray;
private ArrayList<Map<String,String>> mAdapData = new ArrayList<Map<String, String>>();

public MyCustomAdapter(Context mContext) {
    mInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    mSparseBooleanArray = new SparseBooleanArray();
}

public ArrayList<String> getCheckedItems() {
    ArrayList<String> mTempArry = new ArrayList<String>();
    for (int i = 0; i < mAdapData.size(); i++) {
        if (mSparseBooleanArray.get(i)) {
            Map<String, String> map = (Map<String, String>) mAdapData.get(i);
            final String numbr = map.get("Phone").toString();
            mTempArry.add(numbr);
        }
    }
    return mTempArry;
}

public int getCount() {
    return this.mAdapData.size();
}

public void addItem(String paramString1, String paramString2) {
    Map<String, String> NameNumber = new HashMap<String, String>();
    NameNumber.put("Name", paramString1);
    NameNumber.put("Phone", paramString2);
    this.mAdapData.add(NameNumber);
    notifyDataSetChanged();
}

@SuppressWarnings("unchecked")
public Object getItem(int paramInt) {
    return (ArrayList<Map<String, String>>) this.mAdapData.get(paramInt);
}

public long getItemId(int paramInt) {
    return paramInt;
}

public View getView(final int paramInt, View paramView, ViewGroup paramViewGroup) {

    if (paramView == null) {
        paramView = mInflater.inflate(R.layout.multiplecontactview, null);
    }

    TextView txtName = (TextView) paramView.findViewById(R.id.txtContactName);
    TextView txtNumber = (TextView) paramView.findViewById(R.id.txtContactNumber);
    CheckBox mCheckBox = (CheckBox) paramView.findViewById(R.id.checkBox1);
    mCheckBox.setTag(paramInt);
    mCheckBox.setChecked(mSparseBooleanArray.get(paramInt));
    mCheckBox.setOnCheckedChangeListener(mCheckedChangeListener);
    txtName.setTextColor(Color.BLACK);
    txtNumber.setTextColor(Color.BLACK);
    for (int i = 0; i < mAdapData.size(); i++) {
        Map<String, String> map = (Map<String, String>) mAdapData.get(paramInt);
        final String name = map.get("Name").toString();
        final String numbr = map.get("Phone").toString();
        txtName.setText(name);
        txtNumber.setText(numbr);
    }
    return paramView;
}

OnCheckedChangeListener mCheckedChangeListener = new OnCheckedChangeListener() {
    public void onCheckedChanged(CompoundButton buttonView,
            boolean isChecked) {
        mSparseBooleanArray.put((Integer) buttonView.getTag(), isChecked);
    }
};
}

お問い合わせ クラス

public class Contact {

int _id;
String _name;
String _phone_number;

public Contact() {

}

public Contact(int id, String name, String _phone_number) {
    this._id = id;
    this._name = name;
    this._phone_number = _phone_number;
}

public Contact(int id) {
    this._id = id;
}

public Contact(String name, String _phone_number) {
    this._name = name;
    this._phone_number = _phone_number;
}

public int getID() {
    return this._id;
}

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

public String getName() {
    return this._name;
}

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

public String getPhoneNumber() {
    return this._phone_number;
}

public void setPhoneNumber(String phone_number) {
    this._phone_number = phone_number;
}

}
4

1 に答える 1

0

これを行うには、 Textwatcherを実装する必要があります。

private TextWatcher filterTextWatcher = new TextWatcher() {

    public void beforeTextChanged(CharSequence s, int start, int count,
            int after) {
    }

    public void onTextChanged(CharSequence s, int start, int before,
            int count) {

    }

    @Override
    public void afterTextChanged(Editable arg0) {
        /*clear previous contents of list*/
                     adapter.clear();
                    /*add new contents according to the filter*/
                   String filter=arg0.getText().toString();
                   if (filter == null
                            || Pattern
                                    .compile(Pattern.quote(filter),
                                            Pattern.CASE_INSENSITIVE)
                                    .matcher(adapter.getItem(...)).find()
                            || filter.equals("")) {
                        adapter.addItem(...);
                    }
    }

};

次に、その filterTextWatcher を編集テキストに設定します。

searchEditText.addTextChangedListener(filterTextWatcher);

それが役立つことを願っています! :)

于 2012-12-21T09:13:43.003 に答える