Android List Topics - YamamotoDesu/Yamamoto-Notes GitHub Wiki
activity_main.xml
<ListView
android:id="@+id/list"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
/>MainActivity.kt
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val data = mutableListOf("胡椒", "ターメリック", "コリアンダー", "生姜", "ニンニク", "サフラン")
var adapter = ArrayAdapter(
this,
android.R.layout.simple_list_item_1,
data
)
val list = findViewById<ListView>(R.id.list)
list.adapter = adapter
list.setOnItemClickListener { av, view, position, id ->
adapter.remove((view as TextView).text as String)
}
}
activity_main.xml
<ListView
android:id="@+id/list"
android:layout_width="0dp"
android:layout_height="0dp"
android:choiceMode="multipleChoice"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
/>MainActivity.kt
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val data = arrayOf("胡椒", "ターメリック", "コリアンダー", "生姜", "ニンニク", "サフラン")
var adapter = ArrayAdapter(
this,
android.R.layout.simple_list_item_multiple_choice,
data
)
val list = findViewById<ListView>(R.id.list)
list.adapter = adapter
}
}
activity_main.xml
<ListView
android:id="@+id/list"
android:layout_width="0dp"
android:layout_height="0dp"
android:choiceMode="multipleChoiceModal"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
/>MainActivity.kt
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val data = arrayOf("胡椒", "ターメリック", "コリアンダー", "生姜", "ニンニク", "サフラン")
var adapter = ArrayAdapter(
this,
android.R.layout.simple_list_item_checked,
data
)
val list = findViewById<ListView>(R.id.list)
list.adapter = adapter
list.setMultiChoiceModeListener(object : AbsListView.MultiChoiceModeListener {
// アクションモードを起動する時
override fun onCreateActionMode(p0: ActionMode?, p1: Menu?): Boolean {
return true
}
// アクションモードの準備時
override fun onPrepareActionMode(p0: ActionMode?, p1: Menu?): Boolean {
return true
}
//選択項目のチェック状態が変化した時
override fun onItemCheckedStateChanged(
p0: ActionMode?,
p1: Int,
p2: Long,
p3: Boolean
) {
}
//項目をクリック
override fun onActionItemClicked(p0: ActionMode?, p1: MenuItem?): Boolean {
return true
}
override fun onDestroyActionMode(p0: ActionMode?) {
val msg = mutableListOf<CharSequence>()
list.forEach {
val check = it as CheckedTextView
if (check.isChecked) msg.add(check.text)
}
Toast.makeText(
this@MainActivity,
"選択したのは、${msg.joinToString()}",
Toast.LENGTH_SHORT
).show()
}
})
}
var adapter = ArrayAdapter(
this,
android.R.layout.simple_list_item_1,
data
)
val list = findViewById<ListView>(R.id.list)
list.adapter = adapter
list.setOnScrollListener(
object : AbsListView.OnScrollListener {
override fun onScroll(av: AbsListView?, firstVisibleItem: Int, visibleItemCount: Int, totalItemCount: Int) {
if (firstVisibleItem + visibleItemCount + 3 > totalItemCount) {
adapter.add("新 胡椒")
adapter.add("新 ターメリック")
adapter.add("新 コリアンダー")
}
}
override fun onScrollStateChanged(p0: AbsListView?, p1: Int) {
}
}
)
<!--検索ボックス追加-->
<SearchView
android:id="@+id/search"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:iconifiedByDefault="false"
android:queryHint="検索文字列を入力"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
>
</SearchView>
<ListView
android:id="@+id/list"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/search"
/> var adapter = ArrayAdapter(
this,
android.R.layout.simple_list_item_1,
data
)
val list = findViewById<ListView>(R.id.list)
list.adapter = adapter
// フィルター機能を有効化
list.isTextFilterEnabled = true
// 検索ボックスに入力された時の処理を定義
val sv = findViewById<SearchView>(R.id.search)
sv.setOnQueryTextListener(
object : SearchView.OnQueryTextListener {
override fun onQueryTextSubmit(text: String?): Boolean {
if (text.isNullOrBlank()) {
list.clearTextFilter()
} else {
list.setFilterText(text)
}
return false
}
override fun onQueryTextChange(p0: String?): Boolean {
return false
}
}
)
activity_main/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"
android:orientation="vertical">
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView"
android:textSize="25sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tag"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView"
android:textSize="12sp"
app:layout_constraintBottom_toBottomOf="@+id/title"
app:layout_constraintEnd_toEndOf="parent" />
<TextView
android:id="@+id/desc"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="TextView"
android:textSize="15sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/title"
/>
</androidx.constraintlayout.widget.ConstraintLayout>MainActivity.kt
val data = listOf(
mapOf("title" to "革命のエチュード", "tag" to "ピアノ", "desc" to "ピアノの詩人と言われたショパンの代表的なピアノです。"),
mapOf("title" to "G線上のアリア", "tag" to "バイオリン", "desc" to "バッハの作品。バイオリンのG線のみで演出できること..."),
mapOf("title" to "シャコンヌ", "tag" to "チェロ", "desc" to "バッハの作品。パルティータ第2番の終曲です。"),
mapOf("title" to "夜の女王のアリア", "tag" to "声楽", "desc" to "モーツァルト作品のオペラ「魔笛」の中のアリアです")
)
val list = findViewById<ListView>(R.id.list)
list.adapter = SimpleAdapter(
this,
data,
R.layout.list_item,
arrayOf("title", "tag", "desc"),
intArrayOf(R.id.title, R.id.tag, R.id.desc)
)
ListItem.kt
data class ListItem(
val id: Long,
val title: String,
val tag: String,
val desc: String
)MyListAdapter.kt
class MyListAdapter (
private val context: Context,
private val data: List<ListItem>,
private val resource: Int
)
: BaseAdapter() {
private val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
override fun getCount(): Int {
return data.size
}
override fun getItem(position: Int): ListItem {
return data[position]
}
override fun getItemId(position: Int): Long {
return data[position].id
}
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
val item = getItem(position)
val sview = convertView ?: inflater.inflate(resource, null)
sview.findViewById<TextView>(R.id.title).text = item.title
sview.findViewById<TextView>(R.id.tag).text = item.tag
sview.findViewById<TextView>(R.id.desc).text = item.desc
return sview
}
MainActivity.kt
val data = listOf(
ListItem( 1, "革命のエチュード", "ピアノ", "ピアノの詩人と言われたショパンの代表的なピアノです。"),
ListItem( 2, "G線上のアリア", "バイオリン", "バッハの作品。バイオリンのG線のみで演出できること..."),
ListItem( 3, "シャコンヌ", "チェロ", "バッハの作品。パルティータ第2番の終曲です。"),
ListItem( 4, "夜の女王のアリア", "声楽", "モーツァルト作品のオペラ「魔笛」の中のアリアです."),
)
val list = findViewById<ListView>(R.id.list)
list.adapter = MyListAdapter(this, data, R.layout.list_item)activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView"
android:textSize="25sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tag"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView"
android:textSize="12sp"
app:layout_constraintBottom_toBottomOf="@+id/title"
app:layout_constraintEnd_toEndOf="parent" />
<TextView
android:id="@+id/desc"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="TextView"
android:textSize="15sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/title"
/>
</androidx.constraintlayout.widget.ConstraintLayout>