工具栏中的TextView更改时通知CursorLoader

时间:2017-10-07 08:50:10

标签: android sqlite android-textwatcher

我的工具栏中有一个TextView,这个TextView显示一个选定的日期(例如2017年10月7日星期六)。这个工具栏在我的MainActivity中,在这个MainActivity里面我有一个带有ListView的Fragment。此ListView使用ContentResolver链接到我的SQLiteDatabase,并且此数据库中的值按其日期进行过滤。

我有以下问题:我希望每当我更改MainActivity工具栏中的TextView时,片段中的CursorLoader都会收到通知。

例如:我将日期(TextView)设置为2017年10月6日,ListView显示了10月6日的所有条目。

我在TextView上使用TextWatcher尝试了它,但它不起作用(我不知道设置TextChangeListener是多么令人兴奋)并且我尝试使用Cursor的onContentChanged()方法装载程序。

没有什么对我有用......也许你有个主意。

编辑:

只是为了更好地理解。我的日期变量是public static final,所以我可以在CursorLoader中访问。我的Fragment CursorLoader中的选择如下:

String selection = DoingContract.COLUMN_DATE + "=?";
String[] selectionArgs = {MainActivity.mDate};

日期变量在以下方法中更新:

public void setupToolbar(String date) {
    mDate = date;
    mToolbarTextView.setText(mDate);
}

setupToolbar方法中的日期参数来自我的DatePicker对话框:

public void onDateSet(DatePicker datePicker, int year, int month, int day) {
    Calendar newDate = Calendar.getInstance();
    newDate.set(year, month, day);
    String date = mDateFormat.format(newDate.getTime());
    if (main != null) {
        main.setupToolbar(date);
    } else {
        entry.setupDate(date);
    }
}

1 个答案:

答案 0 :(得分:0)

在TextView中使用TextChangeListener并在文本更改时重新启动加载程序,如下所示:

textView.addTextChangedListener(new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        //set the charSequense s to some variable that the cursor loader have access to.
        //todo
        // then restart the loader.
        getLoaderManager().restartLoader(/*args*/); 
    }

    @Override
    public void afterTextChanged(Editable s) {
    }
});