2016-05-18 5 views
1

Я внедрил Autocomplete textview. Я настроил его таким образом, что каждый раз, когда я нажимаю autocomplete textview, я показываю предложения. Все работает отлично, за исключением того, что предложения не обновляются после Я выбрал что-то из list.Here мой код:Обновить предложения по элементу текстового объекта автозаполнения нажмите

arrayAdapter = new ArrayAdapter<>(
      HomeActivity.this, android.R.layout.simple_dropdown_item_1line, array); 

    textView = (AutoCompleteTextView) findViewById(R.id.autoCompleteTV); 
    textView.setAdapter(arrayAdapter); 
    textView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(final View arg0) { 

      textView.showDropDown(); 

     } 
    }); 
    textView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
      arrayAdapter.notifyDataSetChanged(); 
     } 

     @Override 
     public void onNothingSelected(AdapterView<?> parent) { 

     } 
    }); 

например, если у меня есть массив строк типа { «а», «abvc», «ajedghed», «б», «bdvhd», " bwgdydg "," c "," cswjwwd "} И я набираю b, он показывает все соответствующие предложения с« b », как« b »,« bdvhd »,« bwgdydg ». Это работает нормально, но если я выберу любое предложение и снова щелкните по автозаполнению текста, он по-прежнему показывает предыдущий результат на всех б.

Я попробовал добавить notifyDataSetChanged() на элемент click, но не повезло.

+0

Thsi как автозаполнение настроен. –

+0

Ну, я уверен, что не просил бы столько настроек –

+0

Каково ваше ожидаемое поведение? – x0r

ответ

1

Я понимаю, что при нажатии на текст из выпадающего списка, вы хотите, чтобы предложение автозаполнения изменить на основе нового текста, который вы выбрали. Для достижения этой цели необходимо расширить класс AutoCompleteTextView, затем переопределить ReplaceText() затем в вашем onItemSelected, звоните textView.replaceText((String)adapterView.getItemAtPosition(i));

что-то вроде этого:

Step1: переопределить AutoCompleteTextView

public class AutoComplete extends AutoCompleteTextView { 

public AutoComplete(Context context) { 
    super(context); 
} 

public AutoComplete(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 

public AutoComplete(Context context, AttributeSet attrs, int defStyleAttr) { 
    super(context, attrs, defStyleAttr); 
} 

public AutoComplete(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { 
    super(context, attrs, defStyleAttr, defStyleRes); 
} 

@Override 
protected void replaceText(CharSequence text) { 
    super.replaceText(text); 
} 

}

Этап 2: изменить t он AutoCompleteTextView inyour XML, чтобы использовать один к созданному

<com.example.tester.AutoComplete 
     android:id="@+id/autocomplete" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:completionThreshold="1" 

/> 

Step3 добавить ReplaceText в вашем коде, как это:

final String [] array={"a", "abvc", "ajedghed", "b", "bdvhd", "bwgdydg", "c", "cswjwwd", 
      "ssehdk","chakra"}; 
    final AutoComplete textView=(AutoComplete) findViewById(R.id.autocomplete); 
    textView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      textView.showDropDown(); 
     } 
    }); 
    if (textView!=null) 
    textView.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_dropdown_item_1line,array)); 

    textView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { 

      textView.replaceText((String)adapterView.getItemAtPosition(i)); 
     } 

     @Override 
     public void onNothingSelected(AdapterView<?> adapterView) { 

     } 
    }); 
+0

Вы получили меня правильно! Спасибо за приятное объяснение. Похоже, что это сработает, но я попробовал что-то еще, что также работало, то есть устанавливал текст автозаполнения для выбранного текста в Onclicklistener. 'textView.setText (((TextView) view) .getText());' –

+1

wow yours намного короче :). Я предположил, что когда выделенный текст отображается в textView, setText уже вызван, и поскольку предложение не было обновлено, это означало, что setText() не работал. – NezSpencer

+0

Точно, setText не вызывается, даже если это необходимо. –

0

Попробуйте сделать что-то подобное, когда пользователь снова нажмет, чтобы текстовое изображение не содержало текста, и адаптер возвращает все элементы в списке.

if(textView.getText().toString() != null && textView.getText().toString().trim() != "") { 
     textView.setText(null); 
    } 
+0

это не вернет ожидаемый набор предложений, я хочу, чтобы мои предложения основывались на выбранном тексте. В этом случае будут показаны предложения, соответствующие пустым представлениям. –

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

  • Нет связанных вопросов^_^