2014年3月24日月曜日

第9回全国高等学校情報科学競技大会 に出ていた

出てました。
IT部門にてわが校が団体入賞、またSE部門にて後輩が優勝です。すごい。
私は入れなかった。

今回の個人戦における主な敗因は、慢心と油断でしょうかね。

前者は、計算問題をつめてこなかったことや頭を最新に保っていなかったことで、普段解いている問題と比較して癖のある出題の前に死。

後者は単にマークのミス。これによって応用問題の表計算において最低2問を確実に落としました。問題数の少なさを考えると、とても手痛い。
しかも某後輩と話をした限りでは考えは合っていたようだし痛いってもんじゃない。とても情けない。

あと、回答メモってくるの忘れて自己採点が行えないという事故もキメました。踏んだり蹴ったりか。

なんと言いますか、慢心ダメ絶対。
このままだと応用情報を落としかねないので、特に苦手な計算問題はやっていく必要がありそうです。
用語問題は、基本情報とある程度被っている所もありますし、検定過去問とかやってればできるようになると思うのですが、こればかりはちゃんと頭を働かせないと駄目ですね。
数学嫌いの踏ん張りどころですねぇ……。

2014年3月2日日曜日

[メモ]ICS未満のActionBarActivityにandroid.R.id.contentにFragmentをうまく表示できない

support-v7に含まれているActionBarActivityを使うと、Android2.3等の古いOSでもActionBarのあるActivityを使うことが出来ます。
ですが、ちょっとしたハマりどころがあったのでメモ。

とりあえず実際に中身のあるFragmentを1つ記述して、それをActionBarActivityで表示するとします。
中身をInnerFragmentとして、例えばこんな感じになるのではないでしょうか。
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    InnerFragment fragment = new InnerFragment();
    transaction.replace(android.R.id.content, fragment);
    transaction.commit();
}
これでも別にクラッシュは起きませんし、ICS以降では普通に表示されます。 ですが、Android2.3等で動かすと何も表示されません。

理由については理解しきっていないためここでは省略してしまいますが、これを解決するためには自前のレイアウトを介せば何も問題ありません。
FrameLayoutだけ置いたレイアウトXMLを作成しsetContentView()でセットした後、FragmentTransactionではFrameLayoutのIDを使うようにしましょう。
詳しいことはStackOverflow読みましょう。

(XMLのID = R.layout.frame, FrameLayoutのID = R.id.frame とした例)
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.frame);
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    InnerFragment fragment = new InnerFragment();
    transaction.replace(R.id.frame, fragment);
    transaction.commit();
}