我有這個使用 Kotlin 的 Android 應用程式,它填充 ListView 以顯示電影標題。我目前面臨的問題是我不確定如何意圖所有與 ListView 標題相關的資料。一個例子是這樣的,如果我點擊“Jumanji”標題,應用程式啟動新活動并顯示與點擊的電影標題相關的所有資訊


到目前為止,我只能填充 ListView 和 Intent 僅點擊電影的標題,但不知道如何做其余的
我填充電影串列的活動:
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)
}
}
我通過 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
}
}
}
uj5u.com熱心網友回復:
我這樣做了并且它有效,但效率不高,我不知道如何縮短它:
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
}
uj5u.com熱心網友回復:
您可以使SimpleMovieItem物件 Parcelable,并且當您單擊一個專案時,您可以創建一個Intent將您的SimpleMovieItem物件放入您意圖的額外包中的物件:
intent.putExtra("key", Bundle().apply {
putParcelable("object", simpleMovieItemObject)
})
在你的新活動中,你可以獲得這個物件并做你想做的一切。
uj5u.com熱心網友回復:
保存:
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()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/393284.html
