如何使用 kotlin android 更新我的 Recyclerview?

新手上路,请多包涵

我有一个显示数据的 Recyclerview 活动。现在我想更新我的 RecyclerView 一旦获得新数据。现在每次我关闭并重新打开我的应用程序时,都会显示新数据。但我希望它不关闭以更新我的视图。

我试过这个,

但什么都行不通,

 fun setupViewPager(viewPager: ViewPager, it: List<TransactionEntity>, incoming: TransactionAdapterDirection, mainActivity: MainActivity) {

        val cc: Context = mainActivity.applicationContext

        if(adapter.count < 2) {
            if (incoming.equals(OUTGOING)) {
                val gson = Gson()
                val gson1 = GsonBuilder().create()
                val model = it
                val IT = gson.toJson(model)

                val pref = cc.applicationContext.getSharedPreferences("MyPrefSend", 0)
                val editor = pref.edit()
                editor.putString("NEWIT_SEND", IT)
                editor.apply()

                adapter.addFragment(SendingFragment(),"SEND")
                adapter.notifyDataSetChanged()
            } else if (incoming.equals(INCOMING)) {
                val gson = Gson()
                val gson1 = GsonBuilder().create()
                val model = it
                val IT = gson.toJson(model)

                val pref = cc.applicationContext.getSharedPreferences("MyPrefRec", 0)
                val editor = pref.edit()
                editor.putString("NEWIT_REC", IT)
                editor.apply()
                adapter.addFragment(ReceiveFragment(), "RECEIVE")
                adapter.notifyDataSetChanged()
            }
            viewPager.adapter = adapter
        }
    }

class ViewPagerAdapter(manager: FragmentManager) : FragmentStatePagerAdapter(manager)
    {
        private val mFragmentList: ArrayList<Fragment> = ArrayList<Fragment>()
        private val mFragmentTitleList: ArrayList<String>  = ArrayList<String>()

        override fun getCount(): Int {
            return mFragmentList.size
        }

        override fun getItem(position: Int): Fragment? {
            var fragment: Fragment? = null
            if (position == 0) {
                fragment = SendingFragment()
            } else if (position == 1) {
                fragment = ReceiveFragment()
            }
            return fragment
        }

        fun addFragment(fragment: Fragment, title: String) {
            mFragmentList.add(fragment)
            mFragmentTitleList.add(title)
        }

        override fun getPageTitle(position: Int): CharSequence? {
            return mFragmentTitleList[position]
        }

        override fun getItemPosition(fragItem: Any): Int {
            var position = 0
            if (fragItem is ReceiveFragment) {
                position = 0
            } else if (fragItem is SendingFragment) {
                position = 1
            }
            return if (position >= 0) position else PagerAdapter.POSITION_NONE
        }
    }

**Framgnet.kt**

class ReceiveFragment: Fragment()
    {

        private var linearLayoutManager: LinearLayoutManager? = null

        fun fromJson(jsonString: String, type: Type): Any {
            return Gson().fromJson(jsonString, type)
        }

        override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {

            val pref = context!!.getSharedPreferences("MyPrefRec", 0)
            val mFragIT = pref.getString("NEWIT_REC", "")

            val NewIT = fromJson(mFragIT,
                    object : TypeToken<List<TransactionEntity>>() {

                    }.type) as List<TransactionEntity>

            val activity = activity  as MainActivity
            val myAppDatabaseData = activity.getAppDatabaseData()
            val myNetwrk = activity.getNwtwrkData()

            // Inflate the layout for this fragment
            val rootView = inflater.inflate(R.layout.receive_fragment, container, false)
            val recyclerView = rootView.findViewById<RecyclerView>(R.id.transaction_recycler_in) as RecyclerView
            linearLayoutManager = LinearLayoutManager(activity, LinearLayout.VERTICAL, false)
            recyclerView.layoutManager = linearLayoutManager
            recyclerView.adapter = TransactionRecyclerAdapter(NewIT,myAppDatabaseData,TransactionAdapterDirection.INCOMING,myNetwrk)
            recyclerView.setHasFixedSize(true)
            return rootView
        }

    }

我已经试过了, mAdapter.notifyDataSetChanged();

原文由 Karthikeyan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 662
1 个回答

如果你想从活动/片段更新数据,你可以在适配器内部创建一个函数,如下所示:

  public void update(ArrayList<String> modelList){
        //string arraylist is for example pass your data
        // replace your adapter data with argument data
       mAdapter.notifyDataSetChanged();
    }

对于科特林:

 fun update(modelList:ArrayList<String){
   myList = modelList
   myAdapter!!.notifyDataSetChanged()
}

从活动/片段中调用此函数,如下所示:

  mAdapter.update(response.getList());

原文由 Rozina 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题