android app.です。
こちらはkotlinで開発しました。
アプリ紹介
紹介動画です。
苦労した点
連想配列
アプリの中で連想配列を使い、商品を売り場ごとに仕分けることを考えました。スマートにcsvで予め配列を作り、android SDK側から読み込ませようとしましたが、どうにもうまくいかない。そこで泥臭く配列を以下のように自作しました。これでやりたいことはできているので結果オーライです。かなり地味です。
var shelters_1_map : MutableMap<String?,String?>
= mutableMapOf(
"あさつき" to "野菜" ,
"あしたば" to "野菜" ,
"あまなつ" to "野菜" ,
"アスパラガス" to "野菜" ,
"アロエ" to "野菜" ,
"アボカド" to "野菜" ,
"イタリアンパセリ" to "野菜" )
配列をintentに載せる
ぱっと調べたところ配列をintentに載せる方法がなく、拙い知識で色々考えました。結果、ある文字で区切れば、「split」で分裂できることが分かり、配列を一つのデータとして保存することにしました。配列をまずは「join」で結合し、intent、受け取った際は「split」で分割して配列に。
//配列の結合
val join_name=name_of_shelters_3.joinToString(",")
val join_type=type_of_shelters_3.joinToString(",")
intent.putExtra("shelters_fin_name",join_name)
intent.putExtra("shelters_fin_type",join_type)
startActivity(intent)
//配列の分割
val text_no1=intent.getStringExtra("text_no1")
val text_no2 = text_no1.split(".", ",","、","\n")
リストビューにチェックボックス
こちらが一番やっかいでした。simple adapterにtext viewとcheck boxを入れて、リストビューを作成したところ、スクロールした際にチェックが変な位置にいってしまいました。ちょっと動画に保存できていないですが、経験した人には分かる現象になります。回避の方法もそれなりにweb上にありますが、初心者には解読が難しかったです。それでもどうにかやりとげました。
private class MyAdapter(
context: Context?,
data: List<MutableMap<String?, *>?>,
resource: Int,
from: Array<String>,
to: IntArray?
) :
SimpleAdapter(context, data, resource, from, to) {
// 外部から呼び出し可能なマップ
var checkList: MutableMap<Int, Boolean?> = HashMap()
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
val view: View = super.getView(position, convertView, parent)
val l=view as LinearLayout
val ch: CheckBox = l.findViewById(R.id.name_check)
// チェックの状態が変化した場合はマップに記憶する
ch.setOnCheckedChangeListener { buttonView, isChecked ->
checkList[position] = ch.isChecked
}
if (checkList[position]==true) {
ch.isChecked=true
}else
{
ch.isChecked=false
}
return view
}
}
まとめ
これでどうにかやりたいことはできました。こんなアプリでも結構作成が大変。使ってみると、色々気づくことがあった。初めてのアプリリリース作品。


