質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.35%

  • Android Studio

    4509questions

    Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

  • Kotlin

    660questions

    Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

listviewのボタンから画面遷移がしたい

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 523

aNomoto

score 10

 前提・実現したいこと

listviewに追加されたアダプターのボタンから画面遷移が行いたいです。

 発生している問題

画面遷移を実装するにあたって
MyArrayAdapterクラス内に

    fun onViewActivitymove(view: View){
        startActivity(Intent(this, ViewActivity::class.java))
    }
     viewHolder.morningIcon.setOnClickListener {
         onViewActivitymove(it)
    }


を追加したのですが。build時に下記のエラーが発生してしまいます。
public constructor Intent() defined in android.content.Intent
public constructor Intent(p0: Context!, p1: Class<*>!) defined in android.content.Intent
public constructor Intent(p0: Intent!) defined in android.content.Intent
public constructor Intent(p0: String!) defined in android.content.Intent
public constructor Intent(p0: String!, p1: Uri!) defined in android.content.Intent
public constructor Intent(p0: String!, p1: Uri!, p2: Context!, p3: Class<*>!) defined in android.content.Intent

恐らくIntenの引数が不足しているというエラーだと思うのですが
MainActivity内にコードを移すと、問題なくbuildができるという点が理解できません。

list内のボタンから画面遷移を行うにはどのようにすればいいのでしょうか。

 該当のソースコード

//MainActivity.kt
package com.example.promoto.proc

import android.content.Context
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.text.format.DateFormat
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ArrayAdapter
import android.widget.ImageButton
import android.widget.ListView
import android.widget.TextView
import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.list_item.*


import java.util.*


class MainActivity : AppCompatActivity() ,DatePickerFragment.OnDateSelectedListener {
    override fun onSelected(year: Int, month: Int, date: Int) {
        val c = Calendar.getInstance()
        c.set(year, month, date)
            date_button.text= DateFormat.format("MM/dd", c)
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        //初期のリスト項目を設定
        val arrayAdapter = MyArrayAdapter(this, 0).apply{
            floatingActionButton.setOnClickListener {
                val dialog = DatePickerFragment()
                dialog.show(supportFragmentManager, "date_dialog")
                add(ListItem(""))
            }
        }
        //ListViewにリスト項目とArrayAdapterを設定
        val listView: ListView = findViewById(R.id.listView)
        listView.adapter = arrayAdapter

    }
}


class ListItem(val date_data:String){}
//リスト項目を再利用するためのホルダー
data class ViewHolder(val date_dataView: TextView,val morningIcon:ImageButton,val lunchIcon:ImageButton,val dinnerIcon:ImageButton)

//自作のリスト項目データを扱えるようにしたArrayAdapter
class MyArrayAdapter : ArrayAdapter<ListItem> {
    private var inflater : LayoutInflater? = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)as LayoutInflater?

    constructor(context: Context,resource :Int):super(context,resource){}
    override fun getView(position:Int, convertView: View?, parent: ViewGroup?):View{

        var viewHolder : ViewHolder? = null
        var view = convertView

        //再利用の設定
        if(view == null){

            view = inflater!!.inflate(R.layout.list_item,parent,false)

            viewHolder = ViewHolder(
                view.findViewById(R.id.date_button),
                view.findViewById(R.id.morning_button),
                view.findViewById(R.id.lunch_button),
                view.findViewById(R.id.dinner_button)
            )
            view.tag = viewHolder
        }else{
            viewHolder = view.tag as ViewHolder
        }

        //項目の情報設定
        val listItem = getItem(position)
        viewHolder.date_dataView.text =listItem!!.date_data

        viewHolder.morningIcon.setOnClickListener{
            //削除ボタンを押したときの処理
            this.remove(listItem)
            this.notifyDataSetChanged()
        }
        return view!!
    }
}
//list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">

    <android.support.v7.widget.CardView
            xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:card_view="http://schemas.android.com/apk/res-auto"
            android:layout_width="match_parent"
            android:layout_height="135dp"
            card_view:cardCornerRadius="4dp"
            android:id="@+id/cardView"
            tools:layout_editor_absoluteX="31dp"
            card_view:layout_constraintTop_toTopOf="parent"
            card_view:layout_constraintBottom_toBottomOf="parent">

        <!-- カードに載せる情報 -->

        <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_gravity="center_horizontal"
                android:id="@+id/cardRelative"
        >
            <Button
                    android:layout_width="65dp"
                    android:layout_height="match_parent"
                    android:textAllCaps="false" android:layout_alignParentStart="true"
                    android:layout_alignParentTop="true" android:layout_marginTop="0dp"
                    android:layout_marginStart="2dp" android:layout_alignParentBottom="true"
                    android:layout_marginBottom="0dp" android:textStyle="italic"
                    android:layout_toStartOf="@+id/morning_button" android:layout_marginRight="0dp"
                    android:layout_marginEnd="0dp" android:layout_toLeftOf="@+id/morning_button"
                    android:id="@+id/date_button" android:text="@string/date_button_text"/>
            <ImageButton
                    android:layout_width="100dp"
                    android:layout_height="match_parent" app:srcCompat="@drawable/morning_icon"
                    android:id="@+id/morning_button"
                    android:layout_alignParentTop="true"
                    android:layout_marginTop="0dp" android:layout_alignParentBottom="true"
                    android:layout_marginBottom="0dp"
                    android:layout_toStartOf="@+id/lunch_button" android:layout_marginRight="2dp"
                    android:layout_marginEnd="2dp" android:layout_toLeftOf="@+id/lunch_button"/>
            <ImageButton
                    android:layout_width="100dp"
                    android:layout_height="wrap_content" app:srcCompat="@drawable/lunch_icon"
                    android:id="@+id/lunch_button"
                    android:layout_alignParentTop="true" android:layout_marginTop="0dp"
                    android:layout_alignParentBottom="true" android:layout_marginBottom="0dp"
                    android:layout_toStartOf="@+id/dinner_button" android:layout_marginRight="2dp"
                    android:layout_marginEnd="2dp" android:layout_toLeftOf="@+id/dinner_button"/>
            <ImageButton
                    android:layout_width="100dp"
                    android:layout_height="wrap_content" app:srcCompat="@drawable/dinner_icon"
                    android:id="@+id/dinner_button"
                    android:layout_alignParentTop="true" android:layout_marginTop="0dp"
                    android:layout_alignParentBottom="true"
                    android:layout_marginBottom="0dp"
                    android:layout_alignParentEnd="true" android:layout_alignParentRight="true"
                    android:layout_marginRight="5dp" android:layout_marginEnd="5dp"/>
        </RelativeLayout>
    </android.support.v7.widget.CardView>
</android.support.constraint.ConstraintLayout>
//activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">

    <ListView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toTopOf="parent" android:id="@+id/listView"
            app:layout_constraintHorizontal_bias="0.0" app:layout_constraintVertical_bias="1.0"/>
    <android.support.design.widget.FloatingActionButton
            android:layout_height="41dp"
            android:clickable="true" app:srcCompat="@drawable/ic_add_black_24dp"
            android:id="@+id/floatingActionButton"
            android:layout_marginBottom="8dp"
            app:layout_constraintBottom_toBottomOf="parent" android:layout_marginEnd="8dp"
            app:layout_constraintEnd_toEndOf="parent" android:layout_marginRight="8dp" android:layout_marginTop="8dp"
            app:layout_constraintTop_toTopOf="parent" android:layout_marginStart="8dp"
            app:layout_constraintStart_toStartOf="@+id/listView" android:layout_marginLeft="8dp"
            app:layout_constraintHorizontal_bias="0.911" app:layout_constraintVertical_bias="0.96"
            android:layout_width="41dp"/>
</android.support.constraint.ConstraintLayout>

 補足情報(FW/ツールのバージョンなど)

Gradle version 4.6
AndroidStudio 3.2.1

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

startActivity(Intent(this, ViewActivity::class.java))


上記のメソッドってMyArrayAdapter内で呼んでいるのですよね。なのでIntentの第一引数のthisってこの場合MyArrayAdapterになりますね。MyArrayAdapterはContenxtを継承していないのでIntentの第一引数と型が不一致なのでコンパイルが通らないのです。

Kotlinうろ覚えで間違ってるかもですが、下記に変更すればいけるかもです。

startActivity(Intent(this@MainActivity, ViewActivity::class.java))

上記に加えMyArrayAdapterをinner classにする必要があるかもです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/11/08 20:55

    回答ありがとうございました。
    上記の処理に加えMyArrayAdapterをinnnerclassにしたところ無事画面遷移が行えるようになりました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.35%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Android Studio

    4509questions

    Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

  • Kotlin

    660questions

    Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。