18
37

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Androidアプリ開発でよく使うけど忘れがちなTips

Last updated at Posted at 2016-12-02

この記事は今後も適宜更新していきます。
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 {
    // 色々な処理
}

レイアウト関連

gravitylayout_gravityの違い

下記のサイトを参照してください。
「初心者の初心者のためのAndroidアプリ開発!」gravityとlayout_gravity

18
37
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
37

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?