2015-08-22 2 views
0

Я довольно новичок в Android, и я использую Android Studio для разработки.Коммуникация между двумя автозаполнениями

Я разрабатываю приложение, которое связывается с SQL Server и извлекает данные на Android и отображает их по запросу пользователя.

В настоящее время у меня возникает ошибка. То, что я должен сделать, - это поле AutoCompleteTextView, для которого я извлекаю данные и показываю для выбора пользователя (например, имена организации/компании). Теперь, при выборе опции в этом поле, я должен отправить запрос с этим параметром (название организации/компании) и извлечь данные, относящиеся к этой опции из базы данных (например, имена контактных лиц в выбранной организации/компании) и отобразить эти данные как параметры во втором поле AutoCompleteTextView.

Я сделал это в рамках метода OnCreate с использованием ArrayAdapter, но приложение все время сбой, и теперь я понял, что это потому, что значения для второго поля AutoCompleteTextView недоступны во время OnCreate.

Мне нужно иметь возможность динамически изменять второе поле AutoCompleteTextView как и когда выбрано значение для первого поля AutoCompleteTextView.

Любые предложения о том, как я мог бы преодолеть это?

+0

Что вы подразумеваете под "сменой второго автокомплектаTextView"? ACTV является «android.widget.TextView», поэтому вы можете использовать любые методы «TextView» (например, 'setText') – pskink

ответ

0

Не нужно пытаться установить результат во втором AutoCompleteTextView внутри onCreate(). Вы можете выполнить свою задачу снаружи, и когда это будет сделано, вы установите для нее значения. Проверьте AsyncTask, это может быть так полезно.

+0

Итак, если мне нужно выполнить эту задачу за пределами метода OnCreate, мне нужно использовать« AsyncTask », сказать? –

+0

@AshwinRamamoorthy Используете ли вы его внутри 'onCreate()'! это замедлит ваше приложение, и это может привести к сбою, вы должны выполнять задачи, которые занимают много времени от основного потока, используя потоки или AsyncTask. – SaNtoRiaN

+0

Спасибо за подсказку !! –

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) { 

    } 
}); 

Хороший вид.

+0

... Использование AsyncTask казалось лучшим решением, и оно тоже работало. Но спасибо за это, попробуй !! –

+0

@ Ashwin Ramamoorthy. Пожалуйста. ;) –

Смежные вопросы