在两个自动完成文本视图之间进行通信

时间:2015-08-22 06:52:41

标签: java android android-arrayadapter autocompletetextview

我对Android很新,我使用Android Studio进行开发。

我正在开发一个与SQL Server通信的应用程序,并将数据检索到Android并根据用户请求显示它们。

我目前遇到了错误。我应该做的是,有一个AutoCompleteTextView字段,我可以为其检索数据并显示用户选择(例如,组织/公司名称)。现在,在选择此字段上的选项时,我必须使用此选项(组织/公司名称)发送查询,并从数据库中检索与此选项有关的数据(例如,所选组织/公司中的联系人姓名)并在第二个AutoCompleteTextView字段中将此数据显示为选项。

我使用ArrayAdapter在OnCreate方法中执行了此操作,但应用程序仍然崩溃,现在我意识到这是因为第二个AutoCompleteTextView字段的值在OnCreate期间不可用。

我需要能够在选择第一个AutoCompleteTextView字段的值时动态更改第二个AutoCompleteTextView字段。

关于如何克服这个问题的任何建议?

2 个答案:

答案 0 :(得分:0)

无需尝试在AutoCompleteTextView内的第二个onCreate()中设置结果。您可以在外面完成任务,完成后,将值设置为它。检查AsyncTask,它可能非常有用。

答案 1 :(得分:0)

您可以使用此代码启发并使用:

txtSearch = (TextView) findViewById(R.id.txtSearch);
txtSearch.addTextChangedListener(new TextWatcher() {
    @Override
    public void onTextChanged(CharSequence value, int start, int count, int after) {
        if(value.length() > 0){
            notes.clear();
            cursorS = sql.rawQuery("SELECT CategoryID,Title from WebSite_CategoryDB WHERE ParentID = 0 AND Title LIKE + '" + "%" + value + "%" + "'",null);
            try {
                if (cursorS != null) {
                    if (cursorS.moveToFirst()) {
                        do {
                            StartActivity_Entity nte = new StartActivity_Entity();
                            nte._CategoryID = cursorS.getInt(cursorS.getColumnIndex("CategoryID"));
                            nte._Title = cursorS.getString(cursorS.getColumnIndex("Title"));
                            notes.add(nte);
                        } while (cursorS.moveToNext());
                    }
                    adapter.notifyDataSetChanged();
                }
            } catch (Exception e) {
            } finally {
                cursorS.close();
            }
        }else if(value.length() == 0){
            populateListView();
        }
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int before, int count) {

    }

    @Override
    public void afterTextChanged(Editable s) {

    }
});

好看。