この記事は今後も適宜更新していきます。
Androidアプリ開発をしていて良く使うけど、忘れがちなTipsをまとめます。
「え~と、なんかのアプリに実装したよな・・どこだったっけ?」なんて、開発済アプリのコードを探し回るのはもうやめにしたいです。
ボタン関連
ボタン連打防止
ボタンに限りませんが、クリック操作の連打防止方法です。
いくつか方法がありそうですが、以下の処理が良いのではないかと思います。
以下のコード例は、ボタンを押した直後にボタンを無効化、1000ミリ秒後に有効化しています。
有効化は非同期に実行されるので、ボタン処理が待たされることはありません。
import android.os.Handler;
final Button button = (Button)findViewById(R.id.button1);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
button.setEnabled(false);
new Handler().postDelayed(new Runnable() {
public void run() {
button.setEnabled(true);
}
}, 1000L);
// ここにボタンの処理を書く
}
});
コードでボタンを押す
ボタンに限りませんが、コードでクリック操作を実行します。
Button button = (Button)findViewById(R.id.button1);
button.performClick(); //←これがポイント
オプションメニュー関連
Fragmentでオプションメニューを使う
Fragment#onCreateViewでsetHasOptionsMenu(true)
を呼びます。いわゆる「おまじない」のようなものですね。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
setHasOptionsMenu(true); // ←これがないと表示されない!!
}
メニュー項目を動的に表示・非表示にする
はやり、onPrepareOptionsMenu で処理するのが基本だと思います。
以下のコード例では、メニュー項目の削除とリセットを、条件によって表示・非表示するものです。
public void onPrepareOptionsMenu(Menu menu) {
//削除
super.onPrepareOptionsMenu(menu);
MenuItem deleteItem = menu.findItem(R.id.action_delete);
deleteItem.setVisible(index == 1);
//リセット
MenuItem resetItem = menu.findItem(R.id.action_reset_condition);
resetItem.setVisible(index == 0);
}
表示・非表示の条件に変化があった場合、以下のメソッドを呼ぶと onPrepareOptionsMenu が呼び出されるため、結果としてオプションメニューが動的に変化します。
invalidateOptionsMenu();
Fragmentからは
getActivity().invalidateOptionsMenu();
リストビュー関連
リストビューの更新
ListViewの内容を更新したい場合は、以下がポイントです。
private ListAdapter mListAdapter;
//これがポイント。ListViewが再描画される。
mListAdapter.notifyDataSetChanged();
private class ListAdapter extends BaseAdapter {
// 色々な処理
}
レイアウト関連
gravity
とlayout_gravity
の違い
下記のサイトを参照してください。
「初心者の初心者のためのAndroidアプリ開発!」gravityとlayout_gravity