单击 ListView 时意图所有数据

Intent all data when ListView is clicked

我有一个使用 Kotlin 的 Android 应用程序,它填充 ListView 以显示电影标题。我目前面临的问题是我不确定如何意图与 ListView 标题相关的所有数据。 一个例子是这样的,如果我点击“Jumanji”标题,应用程序会启动新的 activity 并显示与所点击的电影标题相关的所有信息

到目前为止,我只能填充 ListView 和 Intent,只能填充所点击电影的标题,但不确定如何对其他可用值执行此操作。

Activity 我填充电影列表的地方:

class SimpleViewListOfMoviesActivity : AppCompatActivity() {

    val INTENT_CODE = 1;

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

        val movies = simpleMovieitemArray
        val movie_tiles = movies.map {it.title}
        // val movie_overviews = movies.map {it.overview} (testing ignore)

        val listAdapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, movie_tiles)
        movielist.adapter = listAdapter

        movielist.onItemClickListener = object : AdapterView.OnItemClickListener {
            override fun onItemClick(parent: AdapterView<*>?, view: View?, position: Int, id: Long)
            {
//              displayToast("You have selected " + parent?.adapter?.getItem(position))
                MovieIntent(parent?.adapter?.getItem(position) as String)
            }

        }
    }


    fun displayToast(message:String){

        Toast.makeText(this,message, Toast.LENGTH_LONG).show()
    }

    fun MovieIntent(message:String)
    {
        var myIntent = Intent(this, SimpleItemDetailActivity::class.java)
        myIntent.putExtra("movieTitle", message)
        startActivityForResult(myIntent,INTENT_CODE)
    }

}

Activity 其中我通过 Intent 获取数据并显示

class SimpleItemDetailActivity : AppCompatActivity() {

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

        var movieTitleFromList = intent.getStringExtra("movieTitle")
        movie_title.text = "$movieTitleFromList"
    }

数据从何而来

class SimpleMovieSampleData {



    companion object{

        var simpleMovieitemArray : ArrayList<SimpleMovieItem>
        init {

            simpleMovieitemArray = ArrayList<SimpleMovieItem>()
            populateSimpleMovieItem()
        }



        fun populateSimpleMovieItem() : ArrayList<SimpleMovieItem>{
simpleMovieitemArray.add(
                SimpleMovieItem("Elsa, Anna, Kristoff and Olaf head far into the forest to learn the truth about an ancient mystery of their kingdom.",
                    "November 22, 2019",
                    "English",
                    "Frozen II (2019)")
            )

            simpleMovieitemArray.add(
                SimpleMovieItem("In Jumanji: The Next Level, the gang is back but the game has changed. As they return to rescue one of their own, the players will have to brave parts unknown from arid deserts to snowy mountains, to escape the world's most dangerous game.",
                    "December 13, 2019",
                    "English",
                    "Jumanji: The Next Level")
            )
//two examples of the movies
            return simpleMovieitemArray
        }

    }
}

您可以将 SimpleMovieItem 对象设为 Parcelable,当您单击一个项目时,您可以创建一个 Intent 将您的 SimpleMovieItem 对象放入您想要的额外包中:

intent.putExtra("key", Bundle().apply {
            putParcelable("object", simpleMovieItemObject)
        })

并且在你的新 Activity 中你可以获得这个对象并做你想做的一切。

我这样做了并且有效,但是效率不高而且我不知道如何缩短它:

override fun onItemClick(parent: AdapterView<*>?, view: View?, position: Int, id: Long)
        {
            var overview = movies[0].overview.toString()
            var release_date = movies[0].release_date.toString()
            var language = movies[0].original_langauge.toString()
            var title = parent?.adapter?.getItem(position)


            if (title == movies[1].title)
            {
                overview = movies[1].overview.toString()
                release_date = movies[1].release_date.toString()
                language = movies[1].original_langauge.toString()
                //continue all the way till the end
            }

保存:

Gson gson = new Gson();
intent.putExtra("key",gson.toJson( movielist.get(position)));

阅读:

SimpleMovieItem movies;
String movieData=(getIntent().getStringExtra("key")));

     Type userType = new TypeToken<SimpleMovieItem>() {
            }.getType();
            movies= gson.fromJson(movieData, userType);

                overview = movies.overview.toString()
                release_date = movies.release_date.toString()
                language = movies.original_langauge.toString()