Share a value across all views of my activity

妖精的绣舞 提交于 2019-12-25 08:29:39

问题


This question is more like a discussion about how you guys would do it.

I'm developing an application that has an Avatar Creation, but this creating occurs across two different Activities.

In the first one the user selects whether is man or a woman and a name, in the next Activity the user has to select his face, hair, clothes and etc.

Since the views for hair and etc changes if the user is a man or a woman how would you implement a way to pass the gender value to all the Views?

I was thinking about using a static member to hold the value so I could access inside my views, or maybe I should use SharedPreferences to do it.

I think using the SharedPreferences is a more elegant way to do it but I'm wondering if there isn't any other better and more elegant way of doing it.

Has anyone thought about other implementations?


回答1:


If its only a small information like "gender" i don't see much harm using "Static" variable(Ofcourse the static variable will become null if your app crashes when its in the background).

SharedPreference will come good if you want the information to be persistent(But i don't see you need this).

One more choice is you do can extend the application class to store the static data across activities.




回答2:


You could pass the gender to the next Activity with start activity Intent. Example:

Intent intent = new Intent(this, NEXT_ACTIVITY.class)
intent.putExtra("gender", genderVariable)
startActivity(intent);

And retrieve the value in NEXT_ACTIVITY class on onCreate() like this:

String genderVariable = ""
Bundle parms = getIntent().getExtras()
if (parms != null) genderVariable = parms.getString("gender")

Then, pass gender to all your views and persist the genderVariable on SharedPreferences or onSavedInstanceState bundle. I prefer onSavedInstanceState.

Hope it helps.




回答3:


I think there are many ways of which 4 I think are better. It ofcourse depends on what kind of data you want to store.

  1. For Lists or hashmaps, using a singleton class would be helpful.
  2. Using a static class would help, but might leak memory. You should be very careful and always check using logcat, MAT before releasing your app.
  3. Using preferences or database.
  4. Passing data as Intent extra (parcelable if needed).



回答4:


Using SharedPreferences would be the better way to share some global values across the application.



来源:https://stackoverflow.com/questions/9037509/share-a-value-across-all-views-of-my-activity

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!