ViewPager+Fragment+NumberPicker显示的问题
来源:互联网 发布:php 格式化百分比 编辑:程序博客网 时间:2024/06/05 09:48
问题描述:在ViewPager+Fragment的结构中,某个Fragment(暂且称之为fragmentC)中有多个NumberPicker,当ViewPager由fragmentC切换到其他fragment时,fragmentC会被销毁(并非完全销毁,有些值还在,原理还不太清楚),当再次切回fragmenC时,会重新执行它的onCreateView方法,重新初始化里面的控件,但是这时,NumberPicker显示的数值全部变成了一样的(后来发现全部变成了最后一个的值),调用NumberPicker的getValue()发现它们真实的值是正确的,显示的却不对,很奇怪。如下图
左边是第一次切换到画面,右边是第二次进来,NumberPicker显示异常,查看了NumberPicker的源代码,发现它是由两份ImageButton和一个EditText组成的,于是在下面同样写了一行EditText,结果EditText显示正常。实在是找不出原因,于是自己写了一个自定义的NumberPicker,两个ImageButton加中间的value部分用TextView实现,结果就没问题了。
代码如下:
package com.example.ppp;import android.content.Context;import android.util.AttributeSet;import android.view.LayoutInflater;import android.view.View;import android.widget.ImageButton;import android.widget.LinearLayout;import android.widget.TextView;import com.example.viewpager.R;public class CustomNumberPicker extends LinearLayout {/** * The increment button. */private ImageButton mIncrementButton;/** * The decrement button. */private ImageButton mDecrementButton;/** * The text for showing the current value. */private TextView mValueText;/** * The height of the text. */private int mTextSize = 12;private int mMinValue;private int mMaxValue;/** * Listener to be notified upon current value change. */private CustomOnValueChangeListener mOnValueChangeListener;private int mValue;public interface CustomOnValueChangeListener {void onValueChange(CustomNumberPicker picker, int previous, int mValue);};public CustomNumberPicker(Context context, AttributeSet attrs) {super(context, attrs);LayoutInflater.from(context).inflate(R.layout.view_number_picker, this,true);mValueText = (TextView) findViewById(R.id.view_number_picker_text_value);mIncrementButton = (ImageButton) findViewById(R.id.view_number_picker_btn_increment);mDecrementButton = (ImageButton) findViewById(R.id.view_number_picker_btn_decrement);mIncrementButton.setOnClickListener(onClickListener);mDecrementButton.setOnClickListener(onClickListener);}OnClickListener onClickListener = new OnClickListener() {public void onClick(View v) {mValueText.clearFocus();if (v.getId() == R.id.view_number_picker_btn_increment) {changeCurrentByOne(true);} else {changeCurrentByOne(false);}}};protected void changeCurrentByOne(boolean increment) {if (increment) {changeCurrent(mValue + 1);} else {changeCurrent(mValue - 1);}}private void changeCurrent(int current) {if (mValue == current) {return;}int previous = mValue;setValue(current);notifyChange(previous, current);}public void setValue(int value) {if (mValue == value) {return;}if (value < mMinValue) {value = mMaxValue;}if (value > mMaxValue) {value = mMinValue;}mValue = value;updateInputTextView();}private void updateInputTextView() {mValueText.setText(String.valueOf(mValue));}private void notifyChange(int previous, int current) {if (mOnValueChangeListener != null) {mOnValueChangeListener.onValueChange(this, previous, mValue);}}public CustomOnValueChangeListener getOnValueChangeListener() {return mOnValueChangeListener;}public void setOnValueChangeListener(CustomOnValueChangeListener mOnValueChangeListener) {this.mOnValueChangeListener = mOnValueChangeListener;}public int getMinValue() {return mMinValue;}public void setMinValue(int mMinValue) {this.mMinValue = mMinValue;}public int getMaxValue() {return mMaxValue;}public void setMaxValue(int mMaxValue) {this.mMaxValue = mMaxValue;}public int getTextSize() {return mTextSize;}public void setTextSize(int size) {this.mTextSize = size;mValueText.setTextSize(size);}public int getValue() {return mValue;}}view_number_picker.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="40dip" android:layout_height="90dip" android:orientation="vertical" > <ImageButton android:id="@+id/view_number_picker_btn_increment" android:layout_width="match_parent" android:layout_height="0dip" android:layout_weight="1" android:background="@drawable/btn_increment_bg" /> <TextView android:id="@+id/view_number_picker_text_value" android:layout_width="match_parent" android:layout_height="0dip" android:layout_weight="1" android:background="@drawable/value_bg" android:gravity="center" android:text="12" android:textColor="#000000" android:textSize="16sp" /> <ImageButton android:id="@+id/view_number_picker_btn_decrement" android:layout_width="match_parent" android:layout_height="0dip" android:layout_weight="1" android:background="@drawable/btn_decrement_bg" /></LinearLayout>
虽然问题解决了,但是还是不知道为什么。
0 0
- ViewPager+Fragment+NumberPicker显示的问题
- viewpager+fragment出现fragment不显示问题
- 关于viewPager嵌套viewPager,切换上层fragment内层fragment不显示的问题
- fragment中嵌套viewpager,viewpager中有多个fragment 有时不显示的问题
- 使用Fragment+ViewPager中遇到的显示空白的问题
- 关于ViewPager中显示fragment的生命周期调用问题
- 多个Fragment使用viewpager不显示的问题
- Android ViewPager+Fragment切换显示不出的问题
- FragmentTabHost嵌套ViewPager,Fragment第二次点击不显示的问题
- 多个viewpager导致Fragment不显示的问题
- Android 多层fragment 嵌套时,viewPager不显示的问题
- Android ViewPager+Fragment切换显示不出的问题
- viewpager的fragment嵌套viewpager的问题
- ViewPager中嵌套Fragment不显示问题
- viewpager 、fragment 遇到的问题
- ViewPager+Fragment出现的问题
- ViewPager+Fragment+EditText的问题
- Viewpager 嵌套fragment的问题
- 并发控制____完成量(comletion)
- activity启动模式探究
- Solr 简介(一)
- I/O多路复用
- [ACM] POJ 3273 Monthly Expense (二分解决最小化最大值)
- ViewPager+Fragment+NumberPicker显示的问题
- Html 字体
- git常用命令
- MAC 10.X 安装Haskell的方法
- 2014可信软件系统工程(国际)暑期学校
- eclipse编译jsp中文出现乱码
- 第一篇博客
- 委托代理
- Vision引擎组件系统中阴影贴图组件与光晕 / 镜头眩光介绍