如何在Array List中显示之前过滤SQLite数据库的结果?

时间:2014-07-16 17:53:30

标签: java android sqlite

在结果显示在列表视图中之前,我无法弄清楚如何从SQLite DB中过滤掉特定结果。没有看到包含当前日期的值,我想知道如果检索到的月份和年份不等于我之前设置的值,那么它们将不会显示。

设置当前日期的2个值是currentMonth和currentYear。 (未在下面的代码中显示)。

ArrayList<HashMap<String, String>> dates =  dbTools.getAllContacts();

    final ListAdapter adapter = new SimpleAdapter( NameOfClass.this, dates, R.layout.exp_item_entry,
            new String[] {"month", "year"},
            new int[] {R.id.MonthTextView, R.id.YearTextView});

    setListAdapter(adapter);

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

easy 答案是:在rawQuery中使用WHERE子句。

真实答案是:它实际上取决于您想要的过滤器 您可以使用Like s,JOINaggregation functionsWHEREGROUP BYHAVING,...或这些的任意组合。

答案 1 :(得分:0)

您可以使用BaseAdapter并修改信息,并在调用notifyDataSetChanged后刷新ListView。

class MyAdapter extends BaseAdapter {
    private LayoutInflater inflater;
    private ArrayList<HashMap<String, String>> dates;

    public MyAdapter(LayoutInflater inflater, ArrayList<HashMap<String, String>> dates){
        this.inflater = inflater;
        this.dates = dates;
        }

    public void setDates(ArrayList<HashMap<String, String>> dates) {
        this.dates = dates;
        }

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

    @Override
    public HashMap<String, String> getItem(int i) {
        return dates.get(i);
    }

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

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        //Definition of your views to use.
        TextView monthTextView = null;
        TextView yearTextView = null;
        if(view == null) {
            //Inflate the item.
            view = inflater.inflate(R.layout.exp_item_entry, null);
            //Your findViewById to link the views
            monthTextView = (TextView)view.findViewById(R.id.monthTextView);
            yearTextView = (TextView)view.findViewById(R.id.yearTextView);
            }
        //What you wanna do with the views linked up.
        HashMap<String, String> item = getItem(i);
        monthTextView.setText(item.get("month"));
        yearTextView.setText(item.get("year"));
        return view;
    }

在ListView中使用适配器:

MyAdapter myAdapter = new MyAdapter(getLayoutInflater(), dates);
...
listView.setAdapter(myAdapter);

要更新信息,您可以使用WHERE执行rawQuery来过滤信息,您只需要将过滤后的日期放在适配器中并调用notifyDataSetChanged。

myAdapter.setDates(filteredDates);    myAdapter.notifyDataSetChanged();