Unit2-3
目次
リストの2種類
val numbers: List<Int> = listOf(1, 2, 3, 4, 5, 6)
//혹은(원소의 형태로 타입을 추측할 수 있는 경우.)
val numbers = listOf(1, 2, 3, 4, 5, 6)
println("List: $numbers")
コトリンでリストを作成する方法//각기 다르게 출력됨. 원본은 안변하기 때문에..
println("Reversed list: ${colors.reversed()}")
println("List: $colors")
リストは読み取り専用で、初期化が完了すると変更できません.ただし、ソート()や逆()などの操作を適用できます.MutableList
val entrees = mutableListOf<String>()
println("Add noodles: ${entrees.add("noodles")}")
println("Entrees: $entrees")
mutableListOf()
で作成でき、add
で要素を追加できます.printlnを入れたのは、出力のtrue/falseをチェックして、add
が成功したか失敗したかを知るためです.val moreItems = listOf("ravioli", "lasagna", "fettuccine")
println("Add list: ${entrees.addAll(moreItems)}")
addAll
は、複数の要素を同時に追加することができる.println("Remove spaghetti: ${entrees.remove("spaghetti")}")
println("Remove first element: ${entrees.removeAt(0)}")
entrees.clear()
//true가 출력됨
println("Empty? ${entrees.isEmpty()}")
remove
は、特定の要素を消去することができる.removeAt
は、特定のインデックス内の要素を消去することができる.リスト全体を削除するにはclear
を使用します.isEmpty
を使用して、リストが空であるかどうかを確認します.複文
val guestsPerFamily = listOf(2, 4, 1, 3)
while (index < guestsPerFamily.size) {
totalGuests += guestsPerFamily[index]
index++
}
val names = listOf("Jessica", "Henry", "Alicia", "Jose")
for (name in names) {
println(name)
}
パラメータとしてリストを渡すclass Vegetables(val toppings: List<String>) : Item("Vegetables", 5) {
//toString-return을 안하면 객체만들어서 냅다 출력할때 이상해서.
override fun toString(): String {
return name
}
}
fun main() {
...
Vegetables(listOf("Cabbage", "Sprouts", "Onion"))
...
}
それより...class Vegetables(vararg val toppings: String) : Item("Vegetables", 5) {
...
fun main() {
...
val vegetables = Vegetables("Cabbage", "Sprouts", "Onion")
...
}
これにより、vararg
修飾子を使用して、同じタイプの可変パラメータを関数または構造関数に渡すことがより効果的である.RecyclerView
RecyclerView
は、画面上でスクロールされたビューを再利用して回収することができ、リストが大きい場合でも効率的に動作することができる.RecyclerView
の動作は、処理時間を大幅に短縮し、リストのスクロールをよりスムーズにするのに役立ちます.class Datasource {
fun loadAffirmations():List<Affirmation>{
//Affirmation 객체를 원소로 가지는 리스트를 반환
return listOf<Affirmation>(
Affirmation(R.string.affirmation1),
Affirmation(R.string.affirmation2),
Affirmation(R.string.affirmation3),
Affirmation(R.string.affirmation4),
Affirmation(R.string.affirmation5),
Affirmation(R.string.affirmation6),
Affirmation(R.string.affirmation7),
Affirmation(R.string.affirmation8),
Affirmation(R.string.affirmation9),
Affirmation(R.string.affirmation10)
)
}
}
例では、確認オブジェクトのリストを返す関数と確認リストを表示するRecyclerViewを作成します.item:表示するリスト内の単一のデータ項目.次の例は、確認クラスオブジェクトを示します.プロジェクトを定義するxml(ex:item list.xml)
Adapter:RecyclerViewのデータ.(データをビューに変換)
ViewHolder:RecyclerViewプロジェクトの表示時に使用/再使用するA pool views.
RecyclerView:画面に表示されるビュー.xmlで作成できます.
Adapter
loadAffirmations
関数から返されるリストから検証インスタンスを取得し、リスト項目ビューに切り替えるには、アダプタが必要です.ViewHolder
RecyclerView
はitemviewと直接コミュニケーションしません.代わりにViewHolders
とコミュニケーションをとる.class ItemAdapter (private val context: Context, private val dataset: List<Affirmation>)
: RecyclerView.Adapter<ItemAdapter.ItemViewHolder>()
{
// 각 data item에 대한 view reference 제공
// 복잡한 data items 이라면 아이템 하나에 view 여러개가 있을 수도. 지금은 텍스트 하나로 구성된 아이템이지만 텍스트+이미지로 구성된 아이템이라면 이미지뷰도 찾아줘야겠지..이 경우 onBindViewHolder도 수정해야.
//뷰홀더에서 모든 data item에 대한 접근 제공
// 각 data item은 여기서 Affirmation 객체이다.
class ItemViewHolder(private val view: View) : RecyclerView.ViewHolder(view) {
val textView: TextView = view.findViewById(R.id.item_title)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
// create a new view
//item.xml 레이아웃으로 이루어진 형태로 만든다
val adapterLayout = LayoutInflater.from(parent.context)
.inflate(R.layout.list_item, parent, false)
return ItemViewHolder(adapterLayout)
}
//뷰의 컨텐츠를 대체. 레이아웃 매니저에 의해 호출됨
override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
val item = dataset[position] //position 변수가 현재 항목을 나타냄.
holder.textView.text = context.resources.getString(item.stringResourceId)
}
//데이터셋의 사이즈 반환
override fun getItemCount(): Int {
return dataset.size
}
}
アダプタのコード.viewholderはネストされたクラスとして実装されます.class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//데이터는 Datasource 에 있는 loadAffirmation이라는 손수 만든 함수 호출해서 가져오자.
val myDataset = Datasource().loadAffirmations()
//recyclerView라는 변수를 만들고 findViewById()를 사용하여
// 레이아웃 내에서 RecyclerView 참조를 찾는다.
val recyclerView = findViewById<RecyclerView>(R.id.recycler_view)
//아까 만든 어댑터의 인스턴스를 만든다. ItemAdapter(this, myDataset)
//이 어댑터를 선언한 recyclerView의 어댑터로 설정한다.
recyclerView.adapter = ItemAdapter(this, myDataset)
//recyclerView의 레이아웃 크기가 고정되어 있을때
// 즉 컨텐츠가 변경되도 레이아웃 크기가 안바뀔때이 설정을 트루로 놓을 수 있다.
recyclerView.setHasFixedSize(true)
}
}
RecyclerViewは既にメインActivityで実装されており、現在はMainActivityです.ktを修正しましょう(RecyclerViewに実装済みアダプタの使用を通知する必要があります.)Reference
この問題について(Unit2-3), 我々は、より多くの情報をここで見つけました https://velog.io/@jiwon_choi/Unit2-3テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol