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;                 
}
4

8 に答える 8

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を受け取り、1日が経過すると翌日と前日を返すメソッドを作成できます。

于 2012-08-17T18:08:20.227 に答える
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] 

また

それ以外の場合は、次のように調整できます。

if(position==0){
    position = 7;
}
holder.txtWeekdays.setText(weekdays[position-1]);
于 2012-08-17T17:50:02.893 に答える
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)を回避し、何が返されるかをより明確にするのに役立ちます。

于 2012-08-17T17:48:31.623 に答える
0

あなたはこのようにそれを行うことができます:

holder.txtWeekdays.setText(weekdays[position == 0? weekdays.length - 1 : position - 1]);
于 2012-08-17T17:50:34.363 に答える
0

あなたの位置変数がどこから来ているのかはよくわかりませんが、あなたの考え方では、次のように機能します。

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

代わりに、列挙型を使用して曜日を保持することをお勧めします。これはもう少し読みやすくなります。

于 2012-08-17T17:50:50.833 に答える
0

平日[position]-1ではなく[position-1]にする必要があります。位置を確認します==0(インデックスエラー)

于 2012-08-17T17:48:15.767 に答える
0

たぶん私は間違っていますが、あなたが望むのはこのようなものですか?

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

lasインデックスが必要な場合:

else {
     holder.txtWeekdays.setText(weekdays[position - 1]); 
}
于 2012-08-17T17:48:26.943 に答える
0

まず、列挙型は有限で事前定義されているため、平日は列挙型を使用することをお勧めします。さらに、ArrayIndexOutOfBoundsExceptionは発生しません。次に、コンテキストに依存するため、週の抽象化を作成します(たとえば、通常、稼働週は5日ですが、イスラエルでは日曜日から始まります)。したがって、この抽象化には開始日と曜日のコレクションがあります。

于 2012-08-17T17:56:18.607 に答える