我不得不说spinner是一个坑,很多东西和api都挺不好用的,只是在界面的展示上面给了我们一个便利,其余关于触发、默认显示的文本、更改默认显示的文本都有很多坑。我的需求是这样的,首次进入这个界面,spinner当然是显示默认的第一条数据,当我点击了修改的界面,这个显示的日期需要传递到spinner进行显示,也就是要修改默认显示的spinner文本,关键在于如下代码:

Spinner.setAdapter(expireTimeAdapter);
					Adapter.notifyDataSetChanged(); // 通知spinner刷新数据
					Spinner.setSelection(0, true);

也就是重新设置适配器,然后通知spinner更新列表数据,然后将第几行选中,spinner.setSelecttion(0,true)这个方法如果改成spinner.setSelection(0)是不会触发spinner的列表点击事件的,需要后面加一个参数true,意思是立即执行这个下拉列表的点击事件。感谢如下两篇博文:

androd spinner 更新默认文本

spinner.setselecttion方法的含义

我的主要代码如下:

package ****;
import java.text.ParseException;
import java.text.SimpleDateFormat;
public class PriceWarning2ModifyFragment extends ControlFragment implements
		StationEventListener {
		// **********第2个下拉列表,有效日期************
		expireTimeSpinner = (Spinner) view.findViewById(R.id.effectivedate);
		// 将可选内容与ArrayAdapter连接起来
		expireTimeAdapter = new ArrayAdapter<String>(getActivity(),
				R.layout.activity_tipsprice_spinner, m);
		// //设置下拉列表的风格
		expireTimeAdapter
				.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
		// 将adapter 添加到spinner中
		expireTimeSpinner.setAdapter(expireTimeAdapter);
		// 添加事件Spinner事件监听
		expireTimeSpinner
				.setOnItemSelectedListener(new effectivedateSpinnerSelectedListener());
		expireTimeSpinner.setSelection(0, true);
		// 设置默认值
		expireTimeSpinner.setVisibility(View.VISIBLE);
	// 使用数组形式操作
	class effectivedateSpinnerSelectedListener implements
			OnItemSelectedListener {
		@Override
		public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
				long arg3) {
			switch (arg2) {
			case 0:
				int flagmodify = DocCaptain.getInstance().getPricemodify();
				if (flagmodify == 0) {
					if (modipriceType == CommDataInterface.ORDER_EXPIRE_TYPE_USER_DEFINED) {
						((TextView) arg1).setText(timeAddPrice);
					} else if (modipriceType == CommDataInterface.ORDER_EXPIRE_TYPE_DAY) {
						((TextView) arg1).setText("N");
					} else if (modipriceType == CommDataInterface.ORDER_EXPIRE_TYPE_WEEK) {
						((TextView) arg1).setText("");
					} else {
						((TextView) arg1).setText("效");
					break;
				} else {
					DocCaptain.getInstance().setPricemodify(1);
					effectivetype = CommDataInterface.ORDER_EXPIRE_TYPE_USER_DEFINED;
					effectivetime = chooseDate(1);
					String effectivetimeOne = TimeUtil
							.formatTime(effectivetime);
					((TextView) arg1).setText(effectivetimeOne);
					break;
			case 1:
				effectivetype = CommDataInterface.ORDER_EXPIRE_TYPE_USER_DEFINED;
				effectivetime = chooseDate(2);
				String effectivetimeTwo = TimeUtil.formatTime(effectivetime);
				((TextView) arg1).setText(effectivetimeTwo);
				break;
			default:
				break;
		private Date chooseDate(int hours) {
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			Calendar ca = Calendar.getInstance();
			ca.setTime(new Date());
			ca.add(Calendar.HOUR_OF_DAY, hours);
			return ca.getTime();
		@Override
		public void onNothingSelected(AdapterView<?> arg0) {
			if (getActivity() != null) {
				// 从界面传递参数过来
				modipriceType = DocCaptain.getInstance().getModieffType();
				modiamount = DocCaptain.getInstance().getModiamount();
				instrument = DocCaptain.getInstance()
						.getModifyTipspriceInstrument();
				guid = DocCaptain.getInstance().getGuid();
				timeAddPrice = DocCaptain.getInstance().getModieffTime();
				if (modipriceType == 0) {
					expireTimeSpinner.setAdapter(expireTimeAdapter);
					expireTimeAdapter.notifyDataSetChanged(); // 通知spinner刷新数据
					expireTimeSpinner.setSelection(0, true);
				} else if (modipriceType == 1) {
					expireTimeSpinner.setSelection(6);
				} else if (modipriceType == 2) {
					expireTimeSpinner.setSelection(7);
				} else {
					expireTimeSpinner.setAdapter(expireTimeAdapter);
					expireTimeAdapter.notifyDataSetChanged(); // 通知spinner刷新数据
					expireTimeSpinner.setSelection(0, true);
				loadPriceWaringData();
				refreshPriceWarningUI();
有问题可以沟通。
先看效果图 在告警名称那个地方是一个searchable spinner ,带有搜索的 spinner 控件,本质上还是 spinner 封装了一下,这个没什么好说的。 主要是在不展开的情况下,我需要让 文字 单行 显示 并且省略。可能是我的搜索方法问题没有找到比较好的方式,直到我偶然发现了一个方法。 直接上代码 private void initSearchable Spinner () { import android .view.View; import android .widget.AdapterView; import android .widget.ArrayAdapter; import androi
import android .os.Bundle; import com.google. android .material.floatingactionbutton.FloatingActionButton; import com.google. android .material.snackbar.Snackbar; import android x.appcompat.app.AppCompatActivity.
近期公司项目中需要用到下拉框,为了省事于是就用了自带的 Spinner ,但使用后发现一个问题,就是不能设置提示 文字 。。并且,在父类是 Fragment Activity的时候,还会有不一样的 显示 ,总之使用起来非常的不爽。。于是就决定自己动手封装一个 Spinner 来实现自己的效果,其实实现起来也是比较的简单的,下面我们来一起看看吧。 首先来看看使用效果: 就是上图中的景区级别选框。
此情况应该是 Spinner 自身的BUG所致。这种情况通常发生在重新填充数据之后,除此之外,使用setSelection(int position)都能得到正确的 显示 。              setSelection(int position, boolean animate)和setSelection(int position) 实现机制有较大区别:       当调用前者时重新l
JQuery datatables 重新加载新的action的url datatables ajax reload from new url(全网仅有的解决方案) 清澈@Cherry: 应该是一样使用的吧 android scrollview 滑动到顶端或者指定位置 清澈@Cherry: 谢谢,可能有更好的办法