私はこのコード部分を実行しているときに、レッスンのhashmapが空であるため、IndexOutOfBoundExceptionを取得します。デバッガでチェックしました。なぜそれが空であるか説明してください。データを入力していますが、正しく動作しません。ハッシュマップが空です
public class ScheduleActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.schedule_activity);
ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
viewPager.setAdapter(new SchedulePagerAdapter(getFragmentManager()));
}
}
class SchedulePagerAdapter extends FragmentPagerAdapter {
public SchedulePagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return DayFragment.newInstance();
}
@Override
public CharSequence getPageTitle(int position) {
ArrayList<String> arrayList = new ArrayList<>();
for (String key : LessonsMap.lessons.keySet()) {
arrayList.add(key);
}
return arrayList.get(position);
}
@Override
public int getCount() {
return 6;
}
}
class LessonsMap {
public static Map<String, String> lessons = new HashMap<String, String>();
public LessonsMap() {
lessons.put("Monday", "Test_Data");
lessons.put("Tuesday", "Test_Data");
lessons.put("Wednesday", "Test_Data");
lessons.put("Thursday", "Test_Data");
lessons.put("Friday", "Test_Data");
lessons.put("Saturday", "Test_Data");
}
}
ありがとうございます!
'あなたは' LessonsMap.lessons.keySetを(行うときlessons'がまだデータで満たされていない) ':あなたは、静的
lessons
を維持したい場合はそうしないと、あなたはここで説明する方法のいずれかを使用して、それを初期化する必要がありますなぜなら、これは静的なフィールドであり、コンストラクタにそのフィールドを設定しているからです。それを動作させるには、 'LessonsMap'クラスの' static'ブロックで 'lessons'マップを初期化する必要があります。 @ArolaAbの回答も有効です。 – myhau
サイドノーズ:最初にスタティックを使用しないでください。実際のオブジェクトをインスタンス化し、それらのメソッドを呼び出します。 – GhostCat