Spinner
- 在布局文件中
<Spinner
android:entries="@array/choices" //or @string/array_choices
android:spinnerMode="dropdown" //or dialog
/>
entries指明该Spinner的数据来自资源数组choices,这个资源数组可定义在"array.xml",也可定义在"string.xml"。
spinnerMode设定选择菜单的模式:dropdown(下拉菜单)、dialog(弹出菜单)
- 设置Spinner的Adapter
1) 初始化控件:Spinner spinner = findViewById(R.id.label_spinner);
2) 建立数据源:String[] mItems = getResources().getStringArray(R.array.choices);
3) 建立Adapter:ArrayAdapter < String > adapter = new ArrayAdapter< String >(this,android.R.layout.simple_spinner_item,mItems);
并绑定数据源:adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
注:android.R.layout.simple_spinner_item指(未展开菜单时)系统自带的内置布局
android.R.layout.simple_spinner_dropdown_item指下拉菜单时的样式
4)绑定Adapter到控件:
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(new OnItemSelectedListener(){
@Override
public void onItemSelected(AdapterView<?> parent,View view,int pos,long id){
String spinnerLabel = parent.getItemAtPosition(i).toString();
//
}
@Override
public void onNothingSelected(AdapterView<?> parent){}
});
可以自定义Adapter,要extends BaseAdapter。
Context
Application/Activity/BroadcastReceiver/Service等都是Context。
getAppliction()
getApplicationContext()
以上两个方法可得到相同的结果,因为Application本身也是一个Context。
但是,只有在Activity和Service才能调用到getApplication(),在BroadcastReceiver要通过调用getApplicationContext()获得Application的实例。
tips:
为避免造成内存泄漏,应正确使用Context:
- 当Application的Context能搞定的情况下,并且生命周期长的对象,优先使用Application的Context。
- 不要让生命周期长于Activity的对象持有到Activity的引用。
- 尽量不要在Activity中使用非静态内部类,因为非静态内部类会隐式持有外部类实例的引用,如果使用静态内部类,将外部实例引用作为弱引用持有。
学习链接