天敏官网UT340怎么样

关于NumberPicker的一些操作 - 推酷
关于NumberPicker的一些操作
public class MinutePickerDialog extends AlertDialog implements android.content.DialogInterface.OnClickListener {
private OnMinuteSelectedListener mL
private NumberPicker mMinuteP
public MinutePickerDialog(final Context context, OnMinuteSelectedListener callback) {
super(context);
mListener =
setIcon(0);
Context themeContext = getContext();
setButton(BUTTON_NEGATIVE, themeContext.getText(R.string.vibrate_minute_negative), this);
setButton(BUTTON_POSITIVE, themeContext.getText(R.string.vibrate_minute_positive), this);
mMinutePicker = new NumberPicker(context);
mMinutePicker.setMinValue(0);
mMinutePicker.setMaxValue(4);
final String[] minutes = context.getResources().getStringArray(R.array.minute);
setTitle(context.getString(R.string.vibrate_minute_title, minutes[0]));
mMinutePicker.setDisplayedValues(minutes);
mMinutePicker.setOnValueChangedListener(new OnValueChangeListener() {
public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
setTitle(context.getString(R.string.vibrate_minute_title, minutes[newVal]));
LinearLayout layout = new LinearLayout(context);
layout.setGravity(Gravity.CENTER);
layout.addView(mMinutePicker, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT));
setView(layout);
setCanceledOnTouchOutside(true);
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case BUTTON_POSITIVE:
if (mListener != null) {
mMinutePicker.clearFocus();
mListener.onMinuteSelected(mMinutePicker, Integer.parseInt(mMinutePicker.getDisplayedValues()[mMinutePicker.getValue()]));
* The callback interface used to indicate the user is done filling in the
* time (they clicked on the 'Set' button).
public interface OnMinuteSelectedListener {
* @param view
The view associated with this listener.
* @param minute
The minute that was set.
void onMinuteSelected(NumberPicker view, int minute);
new MinutePickerDialog(getActivity(), new OnMinuteSelectedListener() {
public void onMinuteSelected(NumberPicker view, int minute) {
tvThreshold.setText(getString(R.string.vibrate_minute_title, minute));
}).show();
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致[android]如何重置数据 NumberPicker
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.
我要用两个s 来显示省 ( mProvincePicker ) 和市 ( mCityPicker ) 我的应用程序中的数据。当用户更改了省数据时,应该相应地改变城市数据。重置 mCityPicker 中的数据 NumberPicker.onValueChange(NumberPicker picker, int oldVal, int newVal) 。但它不能很好和 java.lang.ArrayIndexOutOfBoundsException 这款应用程序崩溃。
这里是我的代码:
public class AreaPickerDialog extends Dialog implements OnValueChangeListener, OnClickListener {
static final String TAG = "AreaPickerDialog";
private NumberPicker mProvinceP
private NumberPicker mCityP
private Button mCancelB
private Button mOKB
private AreaUtil mAreaU
private List&Area& mP
private int mAreaId;
private int mProvinceId;
private Handler mH
public AreaPickerDialog(Context context, Handler handler, int areaId) {
super(context);
mAreaUtil = AreaUtil.getInstance();
mProvinces = mAreaUtil.getProvinceList();
mAreaId = areaId;
mProvinceId = mAreaUtil.getProvinceIdByAreaId(areaId);
mHandler =
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dialog_area_picker);
mProvincePicker = (NumberPicker) findViewById(R.id.np_province);
mCityPicker = (NumberPicker) findViewById(R.id.np_city);
mCancelBtn = (Button) findViewById(R.id.btn_cancel);
mOKBtn = (Button) findViewById(R.id.btn_ok);
initProvinceData();
mProvincePicker.setOnValueChangedListener(this);
mCityPicker.setOnValueChangedListener(this);
mCancelBtn.setOnClickListener(this);
mOKBtn.setOnClickListener(this);
private void initProvinceData() {
if (mProvinces != null && mProvinces.size() & 0) {
String[] provinceNames = new String[mProvinces.size()];
for (int i = 0; i & provinceNames. i++) {
provinceNames[i] = mProvinces.get(i).getProvincename();
mProvincePicker.setDisplayedValues(provinceNames );
mProvincePicker.setMinValue(1);
mProvincePicker.setMaxValue(mProvinces.size());
mProvincePicker.setValue(mProvinceId);
initCityData(mProvincePicker.getValue());
private void initCityData(int provinceId) {
List&Arealist& cities = mAreaUtil.getCityListOfProvince(provinceId);
if (cities != null && cities.size() & 0) {
int min = Integer.parseInt(cities.get(0).getAreaid());
int max = Integer.parseInt(cities.get(cities.size() -1).getAreaid());
String[] cityNames = new String[cities.size()];
for (int i = 0; i & cityNames. i++) {
cityNames[i] = cities.get(i).getName();
mCityPicker.setValue(0);
mCityPicker.setDisplayedValues(cityNames);
mCityPicker.setMinValue(min);
mCityPicker.setMaxValue(max);
} catch (NumberFormatException e) {
ILog.e(TAG, e.getMessage(), e);
public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
if (mProvincePicker.equals(picker)) {
initCityData(mProvincePicker.getValue());
} else if (mCityPicker.equals(picker)) {
mAreaId = mCityPicker.getValue();
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_cancel:
dismiss();
case R.id.btn_ok:
Message msg = mHandler.obtainMessage(MineActivity.MSG_UPDATE_AREA);
msg.arg1 = mAreaId;
msg.sendToTarget();
dismiss();
和 logcat 错误跟踪:
12-30 23:09:26.560: E/InputEventReceiver(5620): Exception dispatching input event.
12-30 23:09:26.560: W/dalvikvm(5620): threadid=1: thread exiting with uncaught exception (group=0x41ddf438)
12-30 23:09:26.580: E/AndroidRuntime(5620): FATAL EXCEPTION: main
12-30 23:09:26.580: E/AndroidRuntime(5620): java.lang.ArrayIndexOutOfBoundsException: length=14; index=15
12-30 23:09:26.580: E/AndroidRuntime(5620):
at net.simonvt.numberpicker.NumberPicker.updateInputTextView(NumberPicker.java:1840)
12-30 23:09:26.580: E/AndroidRuntime(5620):
at net.simonvt.numberpicker.NumberPicker.setDisplayedValues(NumberPicker.java:1423)
12-30 23:09:26.580: E/AndroidRuntime(5620):
at com.meishai.app.dialog.AreaPickerDialog.initCityData(AreaPickerDialog.java:88)
12-30 23:09:26.580: E/AndroidRuntime(5620):
at com.meishai.app.dialog.AreaPickerDialog.onValueChange(AreaPickerDialog.java:100)
12-30 23:09:26.580: E/AndroidRuntime(5620):
at net.simonvt.numberpicker.NumberPicker.notifyChange(NumberPicker.java:1855)
12-30 23:09:26.580: E/AndroidRuntime(5620):
at net.simonvt.numberpicker.NumberPicker.setValueInternal(NumberPicker.java:1641)
12-30 23:09:26.580: E/AndroidRuntime(5620):
at net.simonvt.numberpicker.NumberPicker.scrollBy(NumberPicker.java:1106)
12-30 23:09:26.580: E/AndroidRuntime(5620):
at net.simonvt.numberpicker.NumberPicker.onTouchEvent(NumberPicker.java:886)
12-30 23:09:26.580: E/AndroidRuntime(5620):
at android.view.View.dispatchTouchEvent(View.java:7127)
12-30 23:09:26.580: E/AndroidRuntime(5620):
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2170)
12-30 23:09:26.580: E/AndroidRuntime(5620):
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1905)
12-30 23:09:26.580: E/AndroidRuntime(5620):
at net.simonvt.numberpicker.NumberPicker.dispatchTouchEvent(NumberPicker.java:944)
我是重置 minValue,maxValue and DisplayedValues 重置 NumberPicker 数据和不能工作,正确的方法什么?
解决方法 1:
我看看的源代码,找到它将数据,重新计算并刷新 UI 在 setMinValue(int minValue) 和 setMaxValue(int minValue) 。当设置新的 minValue,它将计算使用新的 minValue 和老 maxValue,然后出现错误。
所以,修改一小部分的 NumberPicker : 设置值仅在 setMinValue(int minValue) 和 setMaxValue(int maxValue) ,和更新 UI 在 setDisplayedValues(String[] displayedValues) 。当数据的 NumberPicker 只是改变了,重置的 minValue、maxVaule 和 displayedValues。请注意, setDisplayedValues(String[] displayedValues) 必须在最后调用。
这里是我的修改:
NumberPicker.java:
public void setMinValue(int minValue) {
if (mMinValue == minValue) {
if (minValue & 0) {
throw new IllegalArgumentException("minValue must be &= 0");
mMinValue = minV
if (mMinValue & mValue) {
mValue = mMinV
//boolean wrapSelectorWheel = mMaxValue - mMinValue & mSelectorIndices.
//setWrapSelectorWheel(wrapSelectorWheel);
//initializeSelectorWheelIndices();
//updateInputTextView();
//tryComputeMaxWidth();
invalidate();
public void setMaxValue(int maxValue) {
if (mMaxValue == maxValue) {
if (maxValue & 0) {
throw new IllegalArgumentException("maxValue must be &= 0");
mMaxValue = maxV
if (mMaxValue & mValue) {
mValue = mMaxV
//boolean wrapSelectorWheel = mMaxValue - mMinValue & mSelectorIndices.
//setWrapSelectorWheel(wrapSelectorWheel);
//initializeSelectorWheelIndices();
//updateInputTextView();
//tryComputeMaxWidth();
invalidate();
public void setDisplayedValues(String[] displayedValues) {
if (mDisplayedValues == displayedValues) {
mDisplayedValues = displayedV
if (mDisplayedValues != null) {
// Allow text entry rather than strictly numeric entry.
mInputText.setRawInputType(InputType.TYPE_CLASS_TEXT
| InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
mInputText.setRawInputType(InputType.TYPE_CLASS_NUMBER);
boolean wrapSelectorWheel = mMaxValue - mMinValue & mSelectorIndices.
setWrapSelectorWheel(wrapSelectorWheel);
updateInputTextView();
initializeSelectorWheelIndices();
tryComputeMaxWidth();
AreaPickerDialog.java:
private void initCityData(int provinceId) {
List&Arealist& cities = mAreaUtil.getCityListOfProvince(provinceId);
if (cities != null && cities.size() & 0) {
int min = Integer.parseInt(cities.get(0).getAreaid());
int max = Integer.parseInt(cities.get(cities.size() -1).getAreaid());
String[] cityNames = new String[cities.size()];
for (int i = 0; i & cityNames. i++) {
cityNames[i] = cities.get(i).getName();
mCityPicker.setMinValue(min);
mCityPicker.setMaxValue(max);
mCityPicker.setDisplayedValues(cityNames);
} catch (NumberFormatException e) {
ILog.e(TAG, e.getMessage(), e);
这是一个丑陋但工作的解决方案。

我要回帖

更多关于 天敏机顶盒怎么样 的文章

 

随机推荐