【Android】FragmentでsetArgument()を使った値の受け渡し
Fragmentでのコンストラクタの引数によるFragmentへの値の受け渡しは推奨されていないのでBundleにラップして情報をFragmentクラスへ受け渡すsetArguments()
を使用します。
なぜsetArguments()
を使用するかは、参考サイトに詳しく載っていたので、ご覧下さい。
値の設定
setArguments()
で値を設定します。
public static CategoryQuizFragment newInstance(String param) { CategoryQuizFragment fragment = new CategoryQuizFragment(); Bundle args = new Bundle(); args.putString("data", "データ"); fragment.setArguments(args); return fragment; }
値の取得
getArguments()
を使用して値を取得します。
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View view = inflater.inflate(R.layout.fragment_category_quiz, container, false); Log.v("dataを表示", getArguments().getString("data")); return view; }
参考サイト:
Y.A.M の 雑記帳: Android Fragment で setArguments() してるサンプルが多いのはなぜ?
【Android 実装の罠 #1】 Fragment#setArguments() | Developers.IO
Android - ActivityのExtraやFragmentのArgumentを設定する責務は、呼び出される側に持たせたほうがいいんじゃねーのという提案 - Qiita
【Android】「cannot perform this action inside of onloadfinished」エラーの対処法
非同期処理が終わったタイミングで実行しようとした処理で「cannot perform this action inside of onloadfinished」というエラーが発生しています。
このエラーはGUIに関する操作をメインスレッド以外のスレッドから行おうとした場合に発生するものです。
このエラーを解消するためには以下のソースコードを記述します。
エラー解消方法
import android.os.Handler; import android.os.Looper; Handler handler = new Handler(Looper.getMainLooper()); handler.post(new Runnable() { @Override public void run() { // GUIに関する処理を記述 } });
参考サイト:
Android アプリ開発で “cannot perform this action inside of onloadfinished” とエラーメッセージが表示された場面の対処法
【Android(Java)】JSONデータをパースする方法
以下サイトに移転しました。
【Android】EditTextの初期表示に薄く文字を表示
EditTextでの初期表示に薄く文字を表示するためには、android:hint
を使用します。
使用例
<EditText android:layout_height="match_parent" android:layout_width="match_parent" android:inputType="text" android:hint="@string/content_comment" android:id="@+id/edit_comment">
参考サイト:
【Android】FragmentでfindViewById(Idを取得)する方法
FragmentでIdを取得するとき、findViewById
をしてもIdを取得することができません。
FragmentはfindViewById
が定義されていないからです。
ですが、FragmentでIdを取得する方法は簡単にできます。
Idの取得方法
Idの取得は、onCreateView
のなかで処理を行います。
一番最初の状態は以下のようになっていると思います。
public class BlankFragment extends Fragment { . . . @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_blank, container, false); } . . .
上記の状態から以下のように変更します。
public class BlankFragment extends Fragment { . . . @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_blank, container, false); // findViewByIdの前に「view」を付けてIdの取得 Button btn = (Button) view.findViewById(R.id.button); . . . return view } . . .
View view = inflater.inflate(R.layout.fragment_blank, container, false);
と書き換え、最後にreturn view
をします。
そのなかで、Idを取得するためにview.findViewById
とします。findViewById
のまえにview
を付けてあげることで、Idを取得できます。
【Android】Spinnerの使い方
Spinner
を使用することで、プルダウンまたはダイアログでアイテムを複数表示することができます。
アイテムの取得方法も2通りあったので、それも含め以下に書きます。
レイアウトの作成
<Spinner android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/spinner" android:spinnerMode="dialog" />
プルダウン表示の場合はdialog
、プルダウン表示の場合はdropdown
をandroid:spinnerMode
に指定します
アイテムの設定
表示するアイテムを設定するにはAdapterを作成し、Supinnerにセットします。
// Adapterの作成 ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // Adapterにアイテムを追加 adapter.add("red"); adapter.add("green"); adapter.add("blue"); Spinner spinner = (Spinner) findViewById(id.spinner); // SpinnerにAdapterを設定 spinner.setAdapter(adapter);
選択したアイテムの取得方法1
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { Spinner spinner = (Spinner) parent; // 選択したアイテムを取得 String item = (String) spinner.getSelectedItem(); // ログで確認 Log.v("spinner item", item); } @Override public void onNothingSelected(AdapterView<?> arg0) {// アイテムを選択しなかったとき } });
選択したアイテムの取得方法2
// レイアウトからSpinnerを取得 Spinner item = (Spinner) findViewById(R.id.spinner); // 選択したアイテムを取得 String selected = (String) item.getSelectedItem();
参考サイト:
スピナー(Spinner)を使用するには - 逆引きAndroid入門
Androidプログラミングメモ Spinner - arcanum_jpの日記
【Android】EditTextでの入力制限(バリデーション)の種別まとめ
入力欄を表示するEditTextで、入力するデータの種別に応じて指定値をandroid:inputType="指定値"
に指定することで、入力の制限(バリデーション)ができるようになります。
種類がたくさんあるので以下にまとめます。
指定値の種別
指定値 | 動作 |
---|---|
none | 入力不可 |
text | 文字を入力する場合 |
textCapCharacters | すべて大文字で入力する場合 |
textCapWords | 単語の先頭を大文字で入力する場合 |
textCapSentences | 文章の先頭を大文字で入力する場合 |
textAutoCorrect | 文字のスペルミスを自動で修正する場合 |
textAutoComplete | 文字の補完入力する場合 |
textMultiLine | 文字を複数行入力する場合 |
textImeMultiLine | 通常の文字入力時は複数行入力を許可せず、IMEによって複数行入力を設定する場合 |
textUri | URLを入力する場合 |
textEmailAddress | メールアドレスを入力する場合 |
textEmailSubject | メールの件名を入力する場合 |
textShortMessage | ショートメッセージを入力する場合 |
textLongMessage | ロングメッセージを入力する場合 |
textPersonName | 人名を入力する場合 |
textPostalAddress | 住所を入力する場合 |
textPassword | パスワード入力する場合 |
textVisiblePassword | 隠蔽せずにパスワード入力する場合 |
textWebEditText | HTMLを入力する場合 |
textFilter | 他のデータでフィルタされた文字を入力する場合 |
textPhonetic | 発音表記を入力する場合 |
number | 数値入力する場合 |
numberSigned | 符号付きの数値を入力する場合 |
numberDecimal | 小数入力する場合 |
phone | 電話番号を入力する場合 |
datetime | 日付時刻を入力する場合 |
date | 日付を入力する場合 |
time | 時刻を入力する場合 |
参考サイト: