问:我已经为 Stormy Android 应用程序构建了 7 天预测活动。不幸的是,扩展预测在 7 天预测的每一天旁边都显示“星期一”。
任何人都对如何列出从今天开始的一周中接下来的 7 天有一些提示或想法。此应用程序使用 ListView 布局进行扩展预测。
日期适配器
导入 android.content.Context ;
导入 android.view.LayoutInflater ;
导入 android.view.View ;
导入 android.view.ViewGroup ;
导入 android.widget.BaseAdapter ;
导入 android.widget.ImageView ;
导入 android.widget.TextView ;
公共类DayAdapter扩展BaseAdapter {私有上下文mContext ; 私人日[] mDays ; 公共DayAdapter (上下文上下文
, 天[] 天) {
mContext =上下文; mDays =天数;} @Override public int getCount () {返回mDays 。长度;} @Override public Object getItem ( int position ) { return mDays [ position ]; } @Override public long getItemId ( int position ) {
返回 0 ; // 我们不会使用它。标记项以便于参考
} @Override public View getView ( int position , View convertView , ViewGroup parent ) { ViewHolder holder ; if ( convertView == null ) { // 全新的convertView = LayoutInflater . 来自(mContext )。膨胀( R . layout .
daily_list_item , null );
持有人=新的ViewHolder ();// holder.iconImageView = (ImageView) convertView.findViewById(R.id.iconImageView); 持有人。温度标签= ( TextView ) convertView 。findViewById ( R . id . temperatureLabel ); 持有人。dayNameLabel = ( TextView ) convertView 。findViewById ( R . id . dayNameLabel );
持有人。lowTempLabel = ( TextView ) convertView 。findViewById ( R . id . lowTempLabel );
转换视图。设置标签(持有人);} else { holder = ( ViewHolder ) convertView 。getTag (); } Day day = mDays [位置]; // holder.iconImageView.setImageResource(day.getIconId()); 持有人。
温度标签。setText ( day . getTemperatureMax () + "" );
持有人。低临时标签。的setText (天。getTemperatureMin ()+ “” ); 持有人。日名标签。的setText (天。getDayOfTheWeek ()); 返回转换视图;}私有静态类ViewHolder { ImageView iconImageView ;
// 默认为 public
TextView temperatureLabel ; TextView的lowTempLabel ; TextView dayNameLabel ; } }
日.java
包 com.joshbgold.WeatherBuddy ;
导入android.os.Parcel ;导入android.os.Parcelable ;导入java.text.SimpleDateFormat ; 导入java.util.Date ; 导入java.util.TimeZone ; 公共类日实现Parcelable {私人长期的mtime ; 私人字符串mSummary ; 私人字符串mIcon ; 私人字符串mTimeZone ; 私人双人
mTemperatureMax ;
私人双mTemperatureMin ; 私人长mSunrise ; 私人长mSunset ; 私人双mMoonPhase ; public long getTime () { return mTime ; } public void setTime ( long time ) { mTime = time ; } public String getSummary () { return mSummary ; }
public void setSummary ( String summary ) {
mSummary = summary ; } public int getTemperatureMax () { return ( int ) Math . 圆形(mTemperatureMax );} public void setTemperatureMax ( double temperatureMax ) { mTemperatureMax = temperatureMax ; }公共双getTemperatureMin () {
返回 ( int )数学。圆形(mTemperatureMin );
} public void setTemperatureMin ( double temperatureMin ) { mTemperatureMin = temperatureMin ; } public String getIcon () { return mIcon ; } public void setIcon ( String icon ) { mIcon = icon ; }公共字符串getTimeZone获取
() {
返回mTimeZone ; } public void setTimeZone ( String timeZone ) { mTimeZone = timeZone ; } public int getIconId () {返回预测。getIconId ( mIcon ); } public String getDayOfTheWeek () { SimpleDateFormat formatter = new SimpleDateFormat ( "EEEE" ); 格式化程序。
setTimeZone ( TimeZone . getTimeZone ( mTimeZone ));
日期日期=新日期(); 字符串dayOfTheWeek =格式化程序。格式(日期);返回dayOfTheWeek ;} @Override public int describeContents () { return 0 ; } @覆盖公共无效writeToParcel (包裹DEST ,INT标志)
{
目标。writeLong ( mTime ); 目的地。writeString ( mSummary ); 目的地。writeDouble ( mTemperatureMax ); 目的地。writeDouble ( mTemperatureMin ); 目的地。writeString ( mIcon ); 目的地。writeString ( mTimeZone ); }私人日(包裹在){ mTime = in . 读长
();
mSummary =中。读取字符串(); mTemperatureMax =中。读双(); mTemperatureMin =中。读双(); mIcon =中。读取字符串(); mTimeZone =中。读取字符串(); } public Day () { } public static final Creator < Day > CREATOR = new Creator < Day
>() {
@覆盖公共日createFromParcel (包裹源){返回新日(源); } @Override public Day [] newArray ( int size ) { return new Day [ size ]; } }; public String getMoonPhaseDescription () { String phaseDescription ; 如果( mMoonPhase == 0
) {
phaseDescription = "新月" ; } else if ( mMoonPhase > 0 && mMoonPhase < 0.25 ) { phaseDescription = " waxing crescent" ; } else if ( mMoonPhase == 0.25 ) { phaseDescription = "第一季度" ; } else if ( mMoonPhase > 0.25 && mMoonPhase < 0.5 ) {
phaseDescription = "打蜡凸起" ;
} else if ( mMoonPhase == 0.5 ) { phaseDescription = "满月" ; } else if ( mMoonPhase > 0.5 && mMoonPhase < 0.75 ) { phaseDescription = " waing gibbous " ; } else if ( mMoonPhase == 0.75 ) { phaseDescription = "last季度" ; }
else if ( mMoonPhase > 0.75 && mMoonPhase < 1 ) {
phaseDescription = "衰弱的新月" ; } else phaseDescription = "--" ; 返回阶段描述;} public void setMoonPhase ( double moonPhase ) { mMoonPhase = moonPhase ; } public long getSunrise () { return mSunrise ; }
public String getFormattedSunriseTime (){ //将我们从 API 接收到的 Unix 时间转换为人类可读的时间
SimpleDateFormat formatter = new SimpleDateFormat ( "h:mm" ); 格式化程序。setTimeZone (时区。getTimeZone获取(getTimeZone获取())); 日期dateTime =新日期( getSunrise () * 1000 ); 返回格式化程序。格式(日期时间);}公开的
void setSunrise (长 日出) {
mSunrise =日出;} public long getSunset () { return mSunset ; } public String getFormattedSunsetTime (){ //将我们从 API 接收到的 Unix 时间转换为人类可读的时间SimpleDateFormat formatter = new SimpleDateFormat ( "h:mm" ); 格式化程序。setTimeZone ( TimeZone . getTimeZone ( getTimeZone
()));
日期dateTime =新日期( getSunset () * 1000 ); 返回格式化程序。格式(日期时间);} public void setSunset (长日落){ mSunset = sunset ; } }
答:Getter 通常不应该有参数,因为它们已经与调用它们的对象相关联。将其调用为 day.getDayOfTheWeek(day) 是多余的,因为它已经可以访问 day 中的每个字段。它可以而且应该被称为 day.getDayOfTheWeek()。
请注意,我将其称为“getter”,尽管它比仅返回成员变量的值要复杂一些。这在类之外是无关紧要的,因为,如果您还记得,类应该像黑匣子一样工作,并且任何 get..() 都应该返回有关对象的相关信息,而不管它如何获取它。另一方面是在类内部,您返回的内容应该与对象的成员变量相关。而且,你错过了一个关键:当日预测是什么时候。