Android 怎么动态的设置Spinner联动
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 怎么动态的设置Spinner联动相关的知识,希望对你有一定的参考价值。
例如:有两个选项,系跟专业。每次都是从服务器读取。
重写一下Adapter,然后自己对Adapter每个Item布局,在布局里面设置一下点击效果就行了。如:public class MainActivity extends Activity
private Spinner mSpinner;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
private void initView()
mSpinner = (Spinner)findViewById(R.id.spinner);
MyAdapter adapter = new MyAdapter(getResources().getStringArray(R.array.girl_names));
mSpinner.setAdapter(adapter);
private class MyAdapter extends BaseAdapter
private String[] idInt ;
public MyAdapter(String[] idInt)
this.idInt = idInt;
@Override
public int getCount()
// TODO Auto-generated method stub
return idInt.length;
@Override
public Object getItem(int arg0)
// TODO Auto-generated method stub
return idInt[arg0];
@Override
public long getItemId(int arg0)
// TODO Auto-generated method stub
return 0;
@Override
public View getView(int arg0, View arg1, ViewGroup arg2)
// TODO Auto-generated method stub
if(arg1 == null)
arg1 = getLayoutInflater().inflate(R.layout.spinner_item, null);
TextView text = (TextView)arg1.findViewById(R.id.spinner_item_id);
text.setText(idInt[arg0]);
return arg1;
spinner_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/text_selector"
android:orientation="vertical" >
<TextView
android:layout_margin="10dip"
android:id="@+id/spinner_item_id"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textIsSelectable="true" >
</TextView>
</LinearLayout>
然后:text_selector.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_pressed="true" android:drawable="@android:color/black"></item>
<item android:state_pressed="false" android:drawable="@android:color/transparent"></item>
</selector> 参考技术A 1.确定需要的数据放到res/values/arrays.xml文件(定义数组)
-省份-
河北省
山西省
北京市
-城市-
承德市
邯郸市
廊坊市
-城市-
海淀区
朝阳区
崇文区
-城市-
大同市
临汾市
2.编写xml界面res/values/main.xml文件(编写界面)
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/textView"
/>
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/province"
/>
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/province"
android:id="@+id/city"
/>
3.在Activity中实现省市联动功能
/**
* 通过Spinner实现省市(两级)联动
* @author 黑色天空
*/
public class MainActivity extends Activity
private TextView textView ;
private Spinner province;
private Spinner city;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//String[] provinces = new String[]"-省份-","河北省","山西省","北京";
textView = (TextView)this.findViewById(R.id.textView);
province = (Spinner)this.findViewById(R.id.province);
city = (Spinner)this.findViewById(R.id.city);
//(处理省的显示)
//将可选内容与ArrayAdapter的连接(从资源数组文件中获取数据)
ArrayAdapter adapter =
ArrayAdapter.createFromResource(this, R.array.province,
android.R.layout.simple_spinner_item);
//new ArrayAdapter(this,android.R.layout.simple_spinner_item,
provinces);
//设置下拉列表的风格
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//将数据绑定到Spinner视图上
province.setAdapter(adapter);
//添加条目被选中监听器
province.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
@Override
public void onItemSelected(AdapterView parent, View view,int position, long
id)
//parent既是province对象
Spinner spinner = (Spinner)parent;
String pro = (String)spinner.getItemAtPosition(position);
//(处理省的市的显示)
//将默认值与ArrayAdapter连接(从资源数组文件中获取数据)
ArrayAdapter cityAdapter = ArrayAdapter.createFromResource
(MainActivity.this, R.array.citydefault,
android.R.layout.simple_spinner_item);
//new ArrayAdapter
// (MainActivity.this,android.R.layout.simple_spinner_item, cities);
//获取所在省含有哪些市(从资源数组文件中获取数据)
if(pro.equals("河北省"))
cityAdapter = ArrayAdapter.createFromResource
(MainActivity.this, R.array.hb, android.R.layout.simple_spinner_item);
else if(pro.equals("北京市"))
cityAdapter = ArrayAdapter.createFromResource
(MainActivity.this, R.array.bj, android.R.layout.simple_spinner_item);
else if(pro.equals("山西省"))
cityAdapter = ArrayAdapter.createFromResource
(MainActivity.this, R.array.shx, android.R.layout.simple_spinner_item);
//绑定数据到Spinner(City)上
city.setAdapter(cityAdapter);
@Override
public void onNothingSelected(AdapterView parent)
);
参考技术B 今天遇到一个问题:一个Activity(A)跳转到另一个Activity(B),我的想法是从A中ListView选中的项中提取出想要的字符串,然后传递到B中,当B中接收到传递过来的信息后,对B中的一个Spinner做相应的改变。
A传数据给B很简单,在A中用Intent去putExtra就行, 然后到B中的onCreate()中用getExtras就行了,可是怎么才能让Spinner也跟着改变呢?
原来spinner有一个setSelection(),将spinner设为全局变量后用spinner.setSelection(GestureConstant.FILE_GESTURE, false);就可以了。
贴一部分代码,不完整。
A Activity
[java] view plaincopy
Intent fileIntent = new Intent(FileManager.this,
CreateGestureActivity.class);
fileIntent.putExtra("file", "file");
startActivity(fileIntent);
B Activity
[java] view plaincopy
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.create_gesture);
spinner = (Spinner) findViewById(R.id.spinner);
// 设置spinner的adapter
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
this, R.array.add_gesture_prompt,
android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
spinner.setPrompt("创建手势类型");
// 设置spinner的监听器
spinner.setOnItemSelectedListener(new OnItemSelectedListener()
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id)
Toast.makeText(CreateGestureActivity.this,
parent.getItemAtPosition(position).toString(),
Toast.LENGTH_SHORT).show();
switch (position)
// 文件
case GestureConstant.FILE_GESTURE:
textView.setText("路径:");
editText.setText("mnt/sdcard/");
button_choose.setText("添加");
current_gesture = GestureConstant.FILE_GESTURE;
overlay.clear(true);
button_ok.setEnabled(false);
// button.setVisibility(View.VISIBLE);
break;
default:
break;
@Override
public void onNothingSelected(AdapterView<?> parent)
);
getIntent2SetSpinner();
/**
* 获取传递过来的Intent信息
*/
private void getIntent2SetSpinner()
Intent i = getIntent();
Bundle b = i.getExtras();
if("file".equals(b.getString("file")))
Log.i(TAG, "------------------------------------------------------>OK?");
spinner.setSelection(GestureConstant.FILE_GESTURE, false);
editText.setText("mnt/");
参考技术C 您好,您这样:
spinner有一个setSelection(),将spinner设为全局变量后用spinner.setSelection(GestureConstant.FILE_GESTURE, false);就可以了。
贴一部分代码,不完整。
Activity
[java] view plaincopy
Intent fileIntent = new Intent(FileManager.this,
CreateGestureActivity.class);
fileIntent.putExtra("file", "file");
startActivity(fileIntent); 参考技术D
http://zhidao.baidu.com/link?url=QvfbyTEEdOIrtvnxuh4NZSTXnvwRkFcONdFa8CWUuEGQrpl8d6AA6g794M2BZ_opjgPWBlJxQYdumfrNIjHQzZih6MIacLc0pwlBVRmahzS
这里有Android中怎样设置Spinner显示的字体颜色
参考技术A 1、在layout中自定义spinner_item.xml,里面设置字体颜色大小等,然后代码中新建newArrayAdapter<String>(this,R.layout.spinner_item);
然后setAdapter(xx);
2、自定义一个布局文件spinner_item.xml,这个就是spinner每一项的样式,一般是TextView,当然也可以是其他控件
3、也可以监听listview点击事件,在里面改变颜色,
以上是关于Android 怎么动态的设置Spinner联动的主要内容,如果未能解决你的问题,请参考以下文章