1
2

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/Kotlin】細かい注意点2

Last updated at Posted at 2019-09-14

ボタン押下でダイアログフラグメントを表示する

注意: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がどうかで判断することもある。
1
2
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
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?