2012-08-17 51 views
0

一周的第一天,我有一个字符串数组持有平日的名字:设置使用数组

private final String[] weekdays = new String[]{"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"}; 

我已经设置周一默认一周的第一天。

现在,我已经给用户选项来选择,如果他/她想要设置或者周日或周一的一周的第一天:

if (firstDay == 0) { 
    holder.txtWeekdays.setText(weekdays[position]); 
} 

使用相同字符串数组我怎么设置星期天作为本周的第一天?

else { 
    holder.txtWeekdays.setText(weekdays[position]-1); //this returns an error 
} 

更新的代码:

public class CalendarWeekAdapter extends BaseAdapter{ 

private final String[] weekdays = new String[]{"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"}; 
Context mContext; 

    private LayoutInflater mInflater; 
    public CalendarWeekAdapter(Context c) 
    { 
      mContext=c; 
      mInflater = LayoutInflater.from(c); 
    } 
    public int getCount() 
    { 
      return weekdays.length; 
    } 
    public Object getItem(int position) 
    { 
      return position; 
    } 
    public long getItemId(int position) 
    { 
      return position; 
    } 
    public View getView(int position, View convertView, ViewGroup parent) 
    { 
      ViewHolder holder=null; 
      if(convertView==null) 
      { 
       convertView = mInflater.inflate(R.layout.calendar_week_gridcell, parent,false); 
       holder = new ViewHolder(); 
       holder.txtWeekdays=(TextView)convertView.findViewById(R.id.weekdays); 
       if(position==0) 
       {        
         convertView.setTag(holder); 
       } 
      } 
      else 
      { 
       holder = (ViewHolder) convertView.getTag(); 
      } 

      if (firstDay == 0) { 
       holder.txtWeekdays.setText(weekdays[position]); 
      } 
      else { 
       holder.txtWeekdays.setText(weekdays[position]); 
      } 

      return convertView; 
    } 

} 
static class ViewHolder 
{   
     TextView txtWeekdays;     
} 

回答

2

你正试图从一个字符串减去1。这不是真的有效。

你需要做的是创建一个返回星期几的方法。事情是这样的:

public String getDayOfWeek(int day, int firstDay) { 
    String[] weekdays; 
    if (firstDay == 0) 
     weekdays = new String[]{"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"}; 
    else 
     weekdays = new String[]{"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}; 
    return weekdays[day]; 
} 

现在,你可以通过位置(使用weekdays[position - 1])做到这一点,但这些都有助于你避免在你的代码(索引-1为例)的错误,给你更清晰,以什么是返回。

+0

我知道我可以做到这一点,即创建另一个字符串数组,但只是想知道是否有更有效的方法来设置使用相同字符串的一周的第一天。 – input 2012-08-17 17:58:40

+1

如果是这样的话,我会与@ BharatSinha的答案一起去。它将允许您控制基础指数(0或1)并从那里确定一周的其余时间。请记住,虽然我发布的方法同样有效,因为它仍然只分配一个数组。 – Eric 2012-08-17 18:00:16

0

它应该是[-1位]代替平日[位置] -1-。并检查位置== 0(索引错误)

+0

对不起,请检查更新的代码。 – input 2012-08-17 17:57:37

0

也许我错了,但它是这样的东西你想要的?

else { 
    holder.txtWeekdays.setText(weekdays[weekdays.length - 1]); 
} 

如果你想在拉斯维加斯指数:

else { 
    holder.txtWeekdays.setText(weekdays[position - 1]); 
} 
+0

我更新了代码。 – input 2012-08-17 18:00:51

2

我想在这种情况下,做的是

private final String[] weekdays = new String[]{"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"}; 

if (user selected monday) { 
    days_start_index = 1; 
    days_end_index = 7; 
} else { 
    days_start_index = 0; 
    days_end_index = 6; 
} 

您可以通过以下方式使用它...

for (int i=days_start_index; i<=days_end_index;i++) 
    // Do whatever you want 

编辑 要访问n第二天你应该使用...

weekdays[n-1+days_start_index] 

OR

人可以以这种方式进行调整:

if(position==0){ 
    position = 7; 
} 
holder.txtWeekdays.setText(weekdays[position-1]); 
+0

'weekdays [position-1]'如果位置== 0会抛出异常。 +1为您的答案的第一部分:) – 2012-08-17 18:01:40

+0

@BharatSinha,我不知道为什么这不起作用。它应该显示订单中的工作日,但不会预测是选择星期日还是星期一,但它仍将星期一显示为一周的第一天。 – input 2012-08-17 18:10:02

0

你可以这样说:

holder.txtWeekdays.setText(weekdays[position == 0? weekdays.length - 1 : position - 1]); 
0

我真的不知道在哪里你的位置变量来自于,但根据你的思路,下面的问题会出现k:

holder.txtWeekdays.setText(weekdays[position-1]) 

我会建议使用枚举来保存一周的日子,而不是。这会更可读。

+0

编辑,以更好地缩小我的答案增加一个枚举 – 2012-08-17 17:58:03

+0

我已经更新了代码。请检查。这一个抛出'ArrayIndexOutofBoundsexception' – input 2012-08-17 17:59:41

+0

我现在看到,你实际上需要整个数组,以适当的顺序的日子。我的错。 – 2012-08-17 18:11:11

0

首先,我会建议使用枚举为一周,因为它是有限的和预定义的,再加上你不会有ArrayIndexOutOfBoundsException。其次,我会创建一周抽象,因为它取决于上下文(例如,通常工作周只有5天,但在以色列它从星期天开始),所以这个抽象将具有开始日和收集周日。

2

虽然它并不直接回答你的问题,这将是最好的,因为一个枚举来实现,这样的事:

/* 
* Easily Localize these by setting the short and long day 
* names using standard Java localization techniques 
* 
* */ 
enum DayOfWeek { 
    MONDAY("Mon", "Monday"), 
    TUESDAY("Tue", "Tuesday"), 
    WEDNESAY("Wed", "Wednesday"), 
    THURSDAY("Thurs", "Thursday"), 
    FRIDAY("Fri", "Friday"), 
    SATURDAY("Sat", "Saturday"), 
    SUNDAY("Sun", "Sunday"); 


    DayOfWeek(final String shortDayName, final String longDayName) { 
     this.shortName = shortDayName; 
     this.longName = longDayName; 
    } 

    public String shortName() { 
     return shortName; 
    } 

    public String longName() { 
     return longName; 
    } 

    private final String shortName; 
    private final String longName; 
} 

然后将这些值更容易被操纵,甚至本地化。你可以写一个方法,需要一个DayOfWeek并返回第二天和前一天,当经过一天等。