2015-02-15 3 views
0

в моем приложении у меня есть пользовательские BaseAdapter для Spinner для вставки данных из списка в том, чтоAndroid установить элементы в Spinner нестандартном адаптер

в этом методе я могу вернуть List как данные:

public List<String> getSmsNumberList() { 
    return Arrays.asList(smsNumbers.split("\\s*,\\s*")); 
} 

после того, как адресность преуспевающих данных, которые я хочу подготовить для вставки в Spinner:

 smsNumbers = G.getInfo().getSmsNumberList(); 
     panel_numbers = (String[]) smsNumbers.toArray(new String[smsNumbers.size()]); 
     SpinnerArrayAdapter dataAdapter = new SpinnerArrayAdapter(this); 
     spinner_panel_numbers.setAdapter(dataAdapter); 

smsNumbers вернулись некоторые данные по getSmsNumberList() функциям, теперь я использую это ниже пользовательские BaseAdapter для просмотра данных в Spinner: Код

адаптера ОБНОВЛЕНО

private class SpinnerArrayAdapter extends BaseAdapter { 

    private final LayoutInflater mInflater; 
    List<String>     list; 


    public SpinnerArrayAdapter(ActivitySmsSendGroup con, List<String> list) { 
     mInflater = LayoutInflater.from(con); 
     this.list = list; 
    } 


    @Override 
    public int getCount() { 
     return list.length; 
    } 


    @Override 
    public Object getItem(int position) { 
     return position; 
    } 


    @Override 
    public long getItemId(int position) { 
     return position; 
    } 


    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     final ListContent holder; 
     View v = convertView; 
     if (v == null) { 
      v = mInflater.inflate(R.layout.panel_number_spinner_style, null); 
      holder = new ListContent(); 

      holder.name = (TextView) v.findViewById(R.id.textView1); 

      v.setTag(holder); 
     } else { 
      holder = (ListContent) v.getTag(); 
     } 
     holder.name.setText(list[position] + ""); 
     return v; 
    } 
} 
static class ListContent { 

    TextView name; 
} 

, к сожалению, мой Spinner диалог не имеют данные, и что пустой

+0

что размер 'panel_numbers' в методе GetView? –

+0

@ ρяσѕρєяK Мне очень жаль, что моя проблема в этой строке: 'panel_numbers = (String []) smsNumbers.toArray (новый String [smsNumbers.size()]); размер равен нулю –

+0

@TuzWorld: отправить полный код' SpinnerArrayAdapter 'класс –

ответ

0

здесь:

panel_numbers = (String []) smsNumbers.toArray (новый Строка [smsNumbers.size()]);

Потому что уже есть список поэтому нет необходимости преобразовать его в массив просто добавить еще один параметр в конструктор SpinnerArrayAdapter класса:

List<String> list; 
public SpinnerArrayAdapter(ActivitySmsSendGroup con,List<String> list) { 
     mInflater = LayoutInflater.from(con); 
     this.list=list; 
    } 

Теперь используйте list вместо panel_numbers везде в классе SpinnerArrayAdapter

Список переходов из категории: SpinnerArrayAdapter класс конструктор при создании объекта:

SpinnerArrayAdapter dataAdapter = new SpinnerArrayAdapter(this,smsNumbers); 
+0

Спасибо, сэр. Я получаю следующие проблемы: сначала: getCount() «длина не может быть разрешена или не является полем» и «Тип выражения должен быть типом массива, но он разрешен для List' для' setText (list [position] + " ")' –

+0

@TuxWorld: используйте методы List для получения размера и элемента для длины используйте 'list.size()' и для использования элемента 'list.get (position)' –

+0

К сожалению, список Spinner пуст, 'smsNumbers.size (см.) 'is' 1' и имеют некоторые данные –

0

В ваш адаптер должен добавить метод и переменную для вашего ArrayList (добавьте свой собственный объект здесь)

public static ArrayList<ListObject> listItems; 


public void addItems(ArrayList<ListObject> mListItems) { 
    listItems = new ArrayList<ListObject>(); 
    listItems.clear(); 
    listItems.addAll(mListItems); 
    notifyDataSetChanged(); 
} 

Затем в главном классе вызова

SpinnerArrayAdapter.addItems(myList); 

Примечание: Убедитесь в том, что GetView your'e установки переменных на основе ListItem в классе, т.е.. title.setText (listItems.get (положение) .name);

+0

спасибо. whats 'ListObject' в вашем коде? я не могу найти, как импортировать этот –

+0

мои sms-номера в переменную 'smsNumbers' –

+0

ListObject - это настраиваемый объект, который я добавил как пример, это может быть все, что вы хотели бы сохранить в ArrayList (в пределах определенных параметров).Например, если вы просто хотите иметь список строк, это будет ArrayList Derek

0

Ваш адаптер должен выглядеть следующим образом:

@Override 
    public View getDropDownView(int position, View convertView, ViewGroup parent){ 
     return getCustomView(position, convertView, parent); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent){ 
     return getCustomView(position, convertView, parent); 
    } 

    public View getCustomView(final int position, View convertView, ViewGroup parent){ 
     LayoutInflater inflater = ((Activity) context).getLayoutInflater(); 
     View rowView = inflater.inflate(R.layout.spinner_row, parent, false); 

     spnItemName = (TextView) rowView.findViewById(R.id.spnItemName); 
     spnItemDel = (TextView) rowView.findViewById(R.id.spnItemDel); 

     spnItemName.setText(iName.get(position)+""); 

     spnItemDel.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       Toast.makeText(context, "Deleted", Toast.LENGTH_SHORT).show(); 
       //iName[position] = null; 
       iName.remove(position); 
       notifyDataSetChanged(); 
      } 
     }); 
     return rowView; 
    } 

Для полного исходного кода смотрите мой github project

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