带有edittext问题的android listview项目过滤器

时间:2015-06-18 16:03:26

标签: android database listview filter

我有一个列表视图,显示项目列表.item来自database.i使用自定义适配器。现在工作正常我在listview顶部添加edittext我想过滤我的list.for exmple当我输入单词“一个“在编辑文本列表过滤器,并告诉我从Ai开始的唯一名称尝试这样做,但我失败了。我是Android开发的新手,所以请帮我解决我的问题。

这是我的数据列表代码

 public class DataListActivity extends Activity  {

    ListView listView;
    SQLiteDatabase sqLiteDatabase;
    FoodDbHelper foodDbHelper;
    Cursor cursor;
    ListDataAdapter listDataAdapter;
    private Button button1;
    ListDataAdapter dataAdapter = null;
    Button button;
    DataProvider dataProvider;
    ArrayList<HashMap<String, String>> namessList;
    EditText inputSearch;
    String search_name;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.data_list_layout);



        inputSearch = (EditText)findViewById(R.id.inputSearch);
        inputSearch.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
                // When user changes the Text
                listDataAdapter.getFilter().filter(cs);
            }

            @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
            }
        });

        listView = (ListView) findViewById(R.id.list_View);

        listDataAdapter = new ListDataAdapter(getApplicationContext(),
                R.layout.row_layout) {
            @Override
            protected void showCheckedButton(int position, boolean value) {
                // TODO Auto-generated method stub

                DataProvider item = (DataProvider) listDataAdapter
                        .getItem(position);
                Log.i("", "");

                item.setSelected(value);

                Button myButton = (Button) findViewById(R.id.findSelected);
                myButton.setOnClickListener(new View.OnClickListener() {

                    @Override
                    public void onClick(View v) {

                        StringBuffer responseText = new StringBuffer();
                        responseText
                               .append("The following dishes were selected...\n");

                        ArrayList<DataProvider> list = listDataAdapter
                                .getSelectedIndexes();

                        int sum = 0;
                        for (int i = 0; i < list.size(); i++) {
                            DataProvider dataProvider = list.get(i);

                            sum = sum + dataProvider.getCalorie();

                            responseText.append("\n" + dataProvider.getName()
                                    + " : " + dataProvider.getCalorie()
                                    + " kcal"
                                    );

                        }

                        Toast.makeText(getApplicationContext(), ""+responseText+"\n"+"................................."
                                       +"\n"+"Total Calories In Your Menu Is : " +sum,
                                Toast.LENGTH_LONG).show();

                    }
                });

            }
        };
        listView.setAdapter(listDataAdapter);
        foodDbHelper = new FoodDbHelper(getApplicationContext());
        sqLiteDatabase = foodDbHelper.getReadableDatabase();
        cursor = foodDbHelper.getInformations(sqLiteDatabase);
        if (cursor.moveToFirst()) {
            do {
                String name, quantity, fat, protein, sugar, carbohydrates;
                boolean selected = false;
                String names = null;
                Integer calorie;

                name = cursor.getString(0);
                quantity = cursor.getString(1);
                calorie = Integer.valueOf(cursor.getString(2));
                fat = cursor.getString(3);
                protein = cursor.getString(4);
                sugar = cursor.getString(5);
                carbohydrates = cursor.getString(6);

                DataProvider dataProvider = new DataProvider(name, quantity,
                        calorie, fat, protein, sugar, carbohydrates, names, selected);

                listDataAdapter.add(dataProvider);

            } while (cursor.moveToNext());
        }
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                                    int position, long id) {

                Toast.makeText(getApplicationContext(),
                        "dish name is : " + dataprovider.getName(), Toast.LENGTH_SHORT).show();

                Intent intent = new Intent(getApplicationContext(),
                        Detail.class);
                 startActivity(intent);
            }
        });
    }
    public void gobackk(View view) {
        Intent intent = new Intent(this, MainMenu.class);
        startActivity(intent);
    }
}

这是我的自定义适配器代码

    public abstract class ListDataAdapter extends ArrayAdapter {

    List list = new ArrayList();
    boolean index[];

    public ListDataAdapter(Context context, int resource) {

        super(context, resource);
        index = new boolean[list.size()];

    }

    static class LayoutHandler {
        TextView name, quantity, calorie, fat, protein, sugar, carbohydrates;
        CheckBox names;

    }

    @Override
    public void add(Object object) {

        super.add(object);
        list.add(object);
        index = new boolean[list.size()];
    }

    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int position) {
        return list.get(position);
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        View row = convertView;
        LayoutHandler layoutHandler;
        if (row == null) {
            LayoutInflater layoutInflater = (LayoutInflater) this.getContext()
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            row = layoutInflater.inflate(R.layout.row_layout, parent, false);
            layoutHandler = new LayoutHandler();
            layoutHandler.name = (TextView) row
                    .findViewById(R.id.text_dish_name);
            layoutHandler.quantity = (TextView) row
                    .findViewById(R.id.text_dish_quantity);
            layoutHandler.calorie = (TextView) row
                    .findViewById(R.id.text_dish_calorie);
            layoutHandler.fat = (TextView) row.findViewById(R.id.text_dish_fat);
            layoutHandler.protein = (TextView) row
                    .findViewById(R.id.text_dish_protein);
            layoutHandler.sugar = (TextView) row
                    .findViewById(R.id.text_dish_sugar);
            layoutHandler.carbohydrates = (TextView) row
                    .findViewById(R.id.text_dish_carbohydrates);
            layoutHandler.names = (CheckBox) row.findViewById(R.id.checkBox1);

            row.setTag(layoutHandler);

        } else {
            layoutHandler = (LayoutHandler) row.getTag();

        }
        DataProvider dataProvider = (DataProvider) this.getItem(position);
        layoutHandler.name.setText(dataProvider.getName());
        layoutHandler.quantity.setText(dataProvider.getQuantity());
        layoutHandler.calorie
                .setText(String.valueOf(dataProvider.getCalorie()));
        layoutHandler.fat.setText(dataProvider.getFat());
        layoutHandler.protein.setText(dataProvider.getProtein());
        layoutHandler.sugar.setText(dataProvider.getSugar());
        layoutHandler.carbohydrates.setText(dataProvider.getCarbohydrates());

        //layoutHandler.names.setChecked(dataProvider.isSelected());
        layoutHandler.names.setTag(position);
        layoutHandler.names.setChecked(index[position]);
        layoutHandler.names
                .setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

                    @Override
                    public void onCheckedChanged(CompoundButton buttonView,
                                                 boolean isChecked) {
                        // TODO Auto-generated method stub
                        int pos = (Integer) buttonView.getTag();
                        index[pos] = isChecked;
                        showCheckedButton(position, isChecked);

                    }
                });

        return row;
    }
    public ArrayList<DataProvider> getSelectedIndexes() {
        int size = list.size();
        ArrayList<DataProvider> selectedItems = new ArrayList<DataProvider>();
        for (int i = 0; i < size; i++) {
            DataProvider cItem = (DataProvider) list.get(i);
            if (index[i]) {
                selectedItems.add(cItem);
            }
        }

        return selectedItems;
    }
    protected abstract void showCheckedButton(int position, boolean value);
}

0 个答案:

没有答案