Android Studio で開発をしているのですが、1つ解決できない問題があり、ご質問したい次第です。
言語はKotlinです。
実現したいことは、渡したい値を今いるActivity(showActivity)からIntentで渡して、それを次のActivity(resultActivity)のListviewで表示することで、
その際、渡した値(listの項目)をListviewに追加したり、削除したいです。
そこでわからないことは、どこのクラスで項目の更新(追加)処理をすればいいのかということです。
今の動きとしては、showActivityから送った値は次のActivityのListの最初に表示されますが、
そのActivityから再度別のActivityに遷移して、再び showActivityから値を渡すと前回の値は消えていて、今回の値だけ表示される状態です。
"name","time","id"の値をまとめて保存してリストに保存、更新したいです。
遷移先のActivityの、
** //保存
mproductPickupadapter.notifyDataSetChanged()**
でリストの更新ができてると思っていましたが、上手くいっていません。
コレクションを直接操作する時は、アダプターの notifyDataSetChanged メソッドを使用すればいいと考えているのですが、
渡す側で、リストにして保存してそれを渡すのか、または渡された方で作成したリストに、もらった値を入れて保存すればいいのか、、また、その値をアプリにちゃんと保存する場合、sharedPrefarenceなどで別の処理で値を保存すればいいのかも悩んでいるので、
もし気が付いた点などありましたら、教えて頂けると幸いです。
値の送り元のshowActivity
pickupbtn.setOnClickListener { //apiの取得データから必要なものをリストに保存 渡して保存したいデータ intent.putExtra("name",product_subject) intent.putExtra("time",pickup_datetime) intent.putExtra("id",itemcode) val products_pickupitem = arrayListOf<product_pickup>() //listに追加 products_pickupitem.add(product_pickup(product_subject,pickup_datetime,itemcode)) startActivity(intent) }
送信先で、Listviewを表示するActivity
import android.content.Context import android.content.Intent import android.support.v7.app.AppCompatActivity import android.os.Bundle import kotlinx.android.synthetic.main.activity_products__pick_up.* import android.content.SharedPreferences class Products_PickUpActivity : AppCompatActivity() { lateinit var intent_name :String lateinit var intent_time :String lateinit var intent_id :String override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_products__pick_up) //お気に入り保存処理 var data_stock: SharedPreferences = getSharedPreferences("DataSave", Context.MODE_PRIVATE) val intent_index = Intent(this,Webview_indexActivity::class.java) //intentの受け取り val intent = intent intent_name = intent.getStringExtra("name") intent_time = intent.getStringExtra("time") intent_id = intent.getStringExtra("id") val array = arrayListOf<product_pickup>() val array_add = array.add(product_pickup(intent_name,intent_time,intent_id)) //更新 var edit = data_stock.edit() edit.putString("pickupdata", array_add.toString()) //保存 edit.apply() //intentの受け取り val products_pickupitem = arrayListOf<product_pickup>() //listに追加 val mproductPickupadapter = product_pickupAdapter(this,products_pickupitem) products_pickupitem.add(product_pickup(intent_name,intent_time,intent_id)) //保存 mproductPickupadapter.notifyDataSetChanged() product_pickuplist.adapter = mproductPickupadapter val intent_itemcode = Intent(this, webview_showActivity::class.java) intent_itemcode.putExtra("itemcode",intent_id ) //スタートボタン product_pickuplist.setOnItemClickListener{ _, view, position, id -> startActivity(intent_itemcode) } //戻るボタン backbtn.setOnClickListener { startActivity(intent_index) } } override fun onResume() { super.onResume() }
Adaspterのクラス
class product_pickupAdapter(val context: Products_PickUpActivity, val items: ArrayList<product_pickup>): BaseAdapter() { private var mlayoutInflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater private var mContext: Context? = null private var mArraylist: ArrayList<product_pickup>? = null init { mContext = context mlayoutInflater = LayoutInflater.from(context) mArraylist = items } private class ViewHolder { var mname: TextView? = null var mdate: TextView? = null } override fun getCount(): Int { return mArraylist!!.count() } override fun getItem(position: Int): product_pickup { return mArraylist!![position] } override fun getItemId(position: Int): Long { return mArraylist!![position].name.toLong() } //xmlのviewのとidで紐付け override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View { var contextView = convertView var holder: product_pickupAdapter.ViewHolder if (contextView == null){ contextView = mlayoutInflater?.inflate(R.layout.products_pickup_item,parent,false) holder = ViewHolder() holder.mname = contextView!!.findViewById<View>(R.id.name) as TextView holder.mdate = contextView!!.findViewById<View>(R.id.date) as TextView contextView.tag = holder }else{ holder = contextView.tag as ViewHolder } contextView = mlayoutInflater.inflate(R.layout.products_pickup_item, parent, false) holder.mname = contextView!!.findViewById<View>(R.id.name) as TextView holder.mdate = contextView!!.findViewById<View>(R.id.date) as TextView holder.mname!!.text = mArraylist!!.get(position)?.name holder.mdate!!.text = mArraylist!!.get(position)?.time contextView.tag = holder return contextView }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/19 06:44