适配器

https://www.cnblogs.com/demoMeng/p/6115289.html

适配器的使用(listview,recycleview,spinner都是这样用的,所有的适配器)

简单版:

创建下拉框的数据源 

1

2

3

4

5

List<String> list = new ArrayList<String>();

list.add("苹果");

list.add("香蕉");

list.add("橘子");

list.add("香蕉");

创建适配器(下拉框的数据源是来自适配器) 

ArrayAdapter<String> adapter=new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item,list);

为适配器添加样式 

adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

系统提供的样式如下

simple_spinner_dropdown_item(列表-间距较高比较好看)

simple_spinner_item(列表-间距紧凑不好看)

simple_list_item_checked(复选框-选中的有绿沟)

simple_list_item_single_choice (单选按钮)

向控件Spinner添加适配器 

1

2

Spinner sp=(Spinner) findViewById(R.id.spinner1);

sp.setAdapter(adapter);

 复杂版:

数据源准备:

list<自定义的也可以>

public class SpinnerDemo3Activity extends AppCompatActivity {

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        int mode = getIntent().getIntExtra("mode", Spinner.MODE_DROPDOWN);

        if (mode == Spinner.MODE_DROPDOWN) {

            setContentView(R.layout.activity_spinner_mode_dropdown);

        } else {

            setContentView(R.layout.activity_spinner_mode_dialog);

        }

        //使用自定义的BaseAdapter

        Spinner spinner3 = (Spinner) findViewById(R.id.spinner3);

        final List<Person> persons = new ArrayList<Person>();

        persons.add(new Person("张三", "上海 "));

        persons.add(new Person("李四", "上海 "));

        persons.add(new Person("王五", "北京"));

        persons.add(new Person("赵六", "广州 "));

        //  建立Adapter绑定数据源

        MyAdapter pAdapter = new MyAdapter(this, persons);

        spinner3.setAdapter(pAdapter);

        spinner3.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

            @Override

            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

                Toast.makeText(SpinnerDemo3Activity.this, "--->" + persons.get(position).getName() + "--" + persons.get(position).getCity(), Toast.LENGTH_SHORT).show();

            }

            @Override

            public void onNothingSelected(AdapterView<?> parent) {

            }

        });

    }

}

实体对象Person:

public class Person {

    private String name;

    private String city;

    public Person() {

    }

    public Person(String name,String city) {

        super();

        this.name = name;

        this.city = city;

    }

    public String getName() {

        return name;

    }

    public void setName(String name) {

        this.name = name;

    }

    public String getCity() {

        return city;

    }

    public void setCity(String city) {

        this.city = city;

    }

}

自定义适配器布局

MyAdapter:    主要是getview()

public class MyAdapter extends BaseAdapter {

    private List<Person> mPersons;

    public MyAdapter(Context context, List<Person> persons) {

        mPersons = persons;

    }

    @Override

    public View getView(int position, View convertView, ViewGroup parent) {         

  #布局填充器  

        LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());

        ViewHolder viewHolder = null;

        if (convertView == null) {

            convertView = layoutInflater.inflate(R.layout.item_spinner_person, null);

            viewHolder = new ViewHolder(convertView);

            convertView.setTag(viewHolder);

        }else {

            viewHolder = (ViewHolder) convertView.getTag();

        }

        viewHolder.tvName.setText(mPersons.get(position).getName());

        viewHolder.tvCity.setText(mPersons.get(position).getCity());

        return convertView;

    }

    static class ViewHolder {

        protected TextView tvName;

        protected TextView tvCity;

        ViewHolder(View rootView) {

            initView(rootView);

        }

        private void initView(View rootView) {

            tvName = (TextView) rootView.findViewById(R.id.tv_name);

            tvCity = (TextView) rootView.findViewById(R.id.tv_city);

        }

    }

}

原文地址:https://www.cnblogs.com/BlueFire-py/p/8645164.html