簡體   English   中英

Android通過自定義適配器將項目設置為Spinner

[英]Android set items into Spinner by custom Adapter

在我的應用程序中,我有自定義BaseAdapter for Spinner用於將List中的數據插入到

在這個方法中,我可以將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對話框沒有數據而且空了

在你的適配器中,你應該為你的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中確保你在類中設置基於listItem的變量即。 title.setText(listItems.get(位置)。名稱);

這里:

panel_numbers =(String [])smsNumbers.toArray(new String [smsNumbers.size()]);

因為已經有List所以不需要將它轉換為Array只需要向SpinnerArrayAdapter類的構造函數添加一個參數:

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

現在,使用list ,而不是panel_numbers在SpinnerArrayAdapter類無處不在

創建對象時,從SpinnerArrayAdapter類構造函數中的Activity傳遞List:

SpinnerArrayAdapter dataAdapter = new SpinnerArrayAdapter(this,smsNumbers);

您的適配器應如下所示:

@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項目

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM