Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

246
Views
Quiero guardar el último botón en el que se hizo clic (el estado de la vista del reciclador) en las preferencias compartidas

Estoy creando una aplicación de noticias, tengo una vista de reciclador con botones que tienen el nombre de categoría de noticias. Quiero guardar el estado de la vista del reciclador después de destruir la aplicación. Por ejemplo, si hago clic en Categorías deportivas, después de destruir la aplicación y volver a abrirla, la aplicación debería tener una categoría deportiva seleccionada. El código no tiene un error pero no guarda el estado. El código está escrito en fragmento.

Algo de mi código

 var isFilterFromCategories = false class HomeFragment : Fragment(), Callback, HomePageAdapter.Listener,CategoryListener { private lateinit var binding : FragmentHomeBinding private lateinit var adapter: HomePageAdapter private lateinit var menuAdapter: MenuAdapter private lateinit var currentCategory : String private val viewModel by activityViewModels<ArticleViewModel>() private var lastPosition : Int = 0 private var firstTime = true private fun showPopUp(view: View) { val popup = PopupMenu(context, view, Gravity.RIGHT) popup.inflate(R.menu.content_of_dropdown_menu) popup.setOnMenuItemClickListener(PopupMenu.OnMenuItemClickListener { item: MenuItem? -> when (item!!.itemId) { R.id.dm_raportimi -> { reportArticle() } } true }) popup.show() } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { // Inflate the layout for this fragment binding = DataBindingUtil.inflate(inflater,R.layout.fragment_home, container, false) val window = requireActivity().window window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); window.statusBarColor = Color.BLACK return binding.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) val snapHelper = PagerSnapHelper() snapHelper.attachToRecyclerView(binding.recyclerView) setDrawerOpeningFunctionality() initRecyclerView() initMenuRecyclerView() viewModel.initializeList() val pref = requireActivity()!!.getPreferences(Context.MODE_PRIVATE) lastPosition = pref.getInt("lastpos",0) topMenuRecyclerView.scrollToPosition(lastPosition) topMenuRecyclerView.addOnScrollListener(object : RecyclerView.OnScrollListener() { override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) { lastPosition = (topMenuRecyclerView.layoutManager as LinearLayoutManager?)!!.findFirstVisibleItemPosition() } }) viewModel.getArrayList().observe(requireActivity()){ adapter.setArticles(it) } } override fun onDestroy() { super.onDestroy() //save position in Shared Preferences val pref = requireActivity()!!.getPreferences(Context.MODE_PRIVATE) val e = pref.edit() e.putInt("lastpos",lastPosition) Log.d("lololo",lastPosition.toString()) e.apply() } override fun onResume() { super.onResume() if (isFilterFromCategories) { isFilterFromCategories = false setUpComingFromCategorySelection() } } private fun initRecyclerView(){ adapter = HomePageAdapter(requireContext(), this) binding.recyclerView.adapter = adapter } private fun initMenuRecyclerView(){ menuAdapter = MenuAdapter(requireContext(),this) binding.topMenuRecyclerView.apply { adapter = menuAdapter } } private fun openWebLink(url: String){ val webIntent: Intent = Intent(Intent.ACTION_VIEW, Uri.parse(url)) startActivity(webIntent) } private fun shareLink(title: String, url: String){ val sharingIntent = Intent.createChooser(Intent().apply { action = Intent.ACTION_SEND putExtra(Intent.EXTRA_TEXT, "https://developer.android.com/training/sharing/") putExtra(Intent.EXTRA_SUBJECT,url) // (Optional) Here we're setting the title of the content putExtra(Intent.EXTRA_TITLE, title) // (Optional) Here we're passing a content URI to an image to be displayed type = "rext/plain" flags = Intent.FLAG_GRANT_READ_URI_PERMISSION }, null) startActivity(sharingIntent) } override fun sourceOfInformationClicked(link: String) { openWebLink(link) } override fun shareLinkInformationClicked(name:String, link:String){ shareLink(name,link) } override fun showMoreOnClicked(view: View){ showPopUp(view) } private fun reportArticle() { val action = HomeFragmentDirections.actionHomeFragmentToReportFragment() findNavController().navigate(action) } private fun setDrawerOpeningFunctionality() { val drawerLayout = requireActivity().findViewById<DrawerLayout>(R.id.drawer_layout) drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); binding.btnNavDraw.setOnClickListener { with(drawerLayout){ if (!isDrawerOpen(GravityCompat.END)){ openDrawer(GravityCompat.END) } else { closeDrawer(GravityCompat.END) } } } } override fun changeCategory(category: String){ viewModel.setNews(category) binding.topMenuRecyclerView.adapter?.notifyDataSetChanged() } override fun selectCategoryListener(category: String, pos: Int) { TODO("Not yet implemented") } private fun setUpComingFromCategorySelection(){ val args: HomeFragmentArgs by navArgs() currentCategory = args.category menuAdapter.setCategory(currentCategory) menuAdapter.selected.add(args.position) binding.topMenuRecyclerView.scrollToPosition(args.position) viewModel.setNews(currentCategory) } }
over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Debe guardar la posición en el clic del elemento. No guardar la posición en onDestroy

 private const val TAG = "DeviceAdapter" class DeviceAdapter( private val context: Context , private val list: MutableList<UsbDevice> , private val callback: (device: UsbDevice) -> Unit): RecyclerView.Adapter<RecyclerView.ViewHolder>() { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { val inflater = LayoutInflater.from(context) val binding = ItemDeviceBinding.inflate(inflater,parent,false) return MyViewHolder(binding) } override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { val device = list[position] if (holder is MyViewHolder){ holder.binding.textHere.text = device.deviceName holder.binding.textHere.setOnClickListener { val pref = context.getSharedPreferences("SHARED_PREFERENCES_KEY", Context.MODE_PRIVATE) val editor = pref.edit() editor.putInt("lastPos",position) editor.apply() } } } override fun getItemCount(): Int { return list.size } class MyViewHolder(val binding: ItemDeviceBinding): RecyclerView.ViewHolder(binding.root)

}

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!