2015-09-04 3 views
0

1) Код ниже: getView не вызывается при вводе в autocompletetextview. Берегитесь список во фрагменте и класс адаптера простирающегося СписокАндроид-массивАдаптер с autocomletetextview не работает со списком <...>

public class SigninFragment extends Fragment { 
     private List<Test> list= null; 

@Override 
public void onActivityCreated(@Nullable Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 

    Test tes= new Test(); 
    tes.setId(1); 
    tes.setDesc("descabc"); 
    list= new ArrayList<>(); 
    list.add(prof); 

    tesListAdapter = 
      new TesListAdapter(
        rootView.getContext() 
        ,R.layout.list_row_adapter 
        ,list); 

    autocompletetextview.setThreshold(3); 
    autocompletetextview.setAdapter(tesListAdapter); 

Моего адаптер Класс:

public class ProfissoesListAdapter extends ArrayAdapter<Test> { **<==HERE** 
    private LayoutInflater inflater; 
    private int resource; 

public TesListAdapter(Context activity, int resource, List<Test> listaProf) **<==HERE**{ 

    super(activity, resource, listaProf); 
    this.inflater = (LayoutInflater) activity 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    this.resource = resource; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder holder; 

...

2) Код ниже: ДА ... getView() вызывает вызов при вводе в autocompletetextview. следить в фрагментировать String [] массив и адаптер exteding ArrayAdapter

public class SigninFragment extends Fragment { 
     private List<Test> list= null; 

@Override 
public void onActivityCreated(@Nullable Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 


    String[] list = {"abcde","bbbbbb","bbbakaka","ccccccc","dddddd"}; 

    tesListAdapter = 
      new TesListAdapter(
        rootView.getContext() 
        ,R.layout.list_row_adapter 
        ,list); 

    autocompletetextview.setThreshold(3); 
    autocompletetextview.setAdapter(tesListAdapter); 

Мой адаптер Класс:

public class ProfissoesListAdapter extends ArrayAdapter<String> { **<==HERE** 
    private LayoutInflater inflater; 
    private int resource; 

public TesListAdapter(Context activity, int resource, String[] listaProf) { **<==HERE** 

    super(activity, resource, listaProf); 
    this.inflater = (LayoutInflater) activity 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    this.resource = resource; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder holder; 

... ВОПРОС

: Почему вариант 1) не вызывает мой getView в классе адаптера, когда я ввожу значение соответствия в текстовое окно автозаполнения? thx

+0

thats it. Я исправил эти дни назад, и вы правы. ответьте ему за пределами этого поля комментариев, чтобы я мог проверить ваш ответ. thx – Al2x

+0

Это не была причина для комментария по другому вопросу? – Luksprog

+0

nop. в другом вопросе у меня есть класс фрагмента и пользовательский адаптер. Когда я отлаживаю адаптер, его невозможно найти вложенные элементы внутри RelativeLayout – Al2x

ответ

1

В первом случае getView() не вызывается, потому что он не соответствует тому, что вы вводите в виджет автозаполнения. Проблема заключается в том, что при использовании с пользовательским классом (не String/CharSequence) ArrayAdapter получает данные, вызывая toString() в объекте данных (в вашем случае метод test toString()).

Если вы не переопределили этот метод, чтобы вернуть что-то значимое (например, значение, заданное с помощью setDesc()), оно вернет что-то вроде этого теста @ (somenumbershere), который не будет соответствовать тому, что вы набираете в качестве фильтра. Таким образом, ключ должен обеспечить правильный метод toString().

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