ボタン押下でダイアログフラグメントを表示する
注意:getSupportFragmentManager()をgetFragmentManager()とするとエラーになる。
HogeActivity.java
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//ダイアログを表示する
DialogFragment dialog = new DialogFragment();
// 表示 getSupportFragmentManager()は固定、sampleは識別タグ
dialog.show(getSupportFragmentManager(), "sample");
}
});
アラートダイアログを出すか、ダイアログフラグメントを出すか
- Activityからどちらも呼び出し可能。
- ダイアログフラグメント:デザインや処理の自由度が高い。
- アラートダイアログ:Style.xmlを適用することでデザインは可能。
- アラートダイアログ:メソッドチェーンで書いても、builder.~で処理を分けてもOK,好みの問題。
ViewではないものにR.stringやR.colorを適用する
strings.xml
<resources>
<string name="error_message">20文字以内で入力してください。</string>
</resources>
MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Resources res = getResources();
TextView textVIew = findViewById(R.id.text);
textVIew.setText(res.getString(R.string.error_message));
}
}
GridViewの列数指定
- numColumns="10"を指定しなければ1列のみの表示となる。
- 10は10列ということ。
hoge.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<GridView
android:id="@+id/grid_view"
android:layout_width="300dp"
android:layout_height="242dp"
android:layout_gravity="center_vertical"
android:numColumns="10"></GridView>
</LinearLayout>
0 test classes found in paclage 'layout'エラーの原因
- drawableとかxmlとか、変なところでRunすると起こるエラー。
- AndroidStudio上部のRun「▶」の左横の枠内で、一番最初に起動するActivityを指定しなおせば解決できる。
getCountで要素数9なのにgetViewが3回しか呼ばれていない
- GridViewに要素を入れるため、Adapterを使用しているときに起きたエラー。
- GridViewの領域に対してitemがおおきくて3つしか入らなかったため、3回しかgetViewが呼ばれていなかった。
- 解決策としてはGridViewの領域を最大限にするか、itemのサイズを小さくする。
adapterのsetTag/getTagって何?
- setTag/getTagしたViewHolderの中身は、他のクラス(FragmentのOnItemClickListenerとか)でも参照ができるようになる。
- Tagを使用しなければ、AdapterのなかでしかそのViewのメソッドの呼び出しができなくなってしまう。
- 下記、kotlinサンプルコード
Adapter.java
/**
* ビュー描画メソッド
*/
override fun getView(p0: Int, p1: View?, p2: ViewGroup?): View {
val itemLayoutView = p1 ?: View.inflate(this.context, R.layout.item_custom_view, null)
var viewHolder = itemLayoutView.tag
if (viewHolder == null) {
viewHolder = ViewHolder()
viewHolder.customView = itemLayoutView.custom_view as CustomView
(itemLayoutView.custom_view as CustomView).initView(
this.values[p0].index()
)
itemLayoutView.tag = viewHolder
}
return itemLayoutView
}
/**
* ビューホルダークラス
*/
class ViewHolder {
lateinit var customView: CustomView
}
Kotlinの[:]と[=]のちがいって何?
- [=]は型推論を使っているときの書き方。
- すぐに代入する時は型推論ができるので[=]を使う。
(例)
main.java
//java
int number = 3;
//kotlin
var number = 3
- [:]はすぐに代入する予定はなく、いつか代入したいな〜というときに使うので、型推論ができない。
(例)
main.java
//java
int number;
number = 3;
//kotlin
lateinit var number:Int
number = 3
?(エルビス演算子)について
- ?は基本的には使用しない。分岐が増えてめんどうなので。
- ?はnullを許容するという意味。
- メソッドの戻り値がnullOKがどうかで判断することもある。