Android 使用SharedReferences保存字符串
我试图制作一个列表视图,通过点击包含收藏夹的按钮来制作。此listview项由1个图像、标题和副标题创建 我的问题是:保存值时对于将要添加的项目数,它始终将值设为1,即使每次单击按钮(处于添加状态)时,该变量都会递增并存储在SharedReferences中 粘贴代码的重要部分: 列表1(活动视图的片段) (“i”是最喜欢的项目的值,“opcionselectionadai”是每个项目的字符串名称标题) Viewp(活动) 公共类Viewp扩展了FragmentActivity实现 ActionBar.TabListener{Android 使用SharedReferences保存字符串,android,android-fragments,android-listview,save,sharedpreferences,Android,Android Fragments,Android Listview,Save,Sharedpreferences,我试图制作一个列表视图,通过点击包含收藏夹的按钮来制作。此listview项由1个图像、标题和副标题创建 我的问题是:保存值时对于将要添加的项目数,它始终将值设为1,即使每次单击按钮(处于添加状态)时,该变量都会递增并存储在SharedReferences中 粘贴代码的重要部分: 列表1(活动视图的片段) (“i”是最喜欢的项目的值,“opcionselectionadai”是每个项目的字符串名称标题) Viewp(活动) 公共类Viewp扩展了FragmentActivity实现 Acti
private ViewPager viewPager;
private TabsPagerAdapter mAdapter;
private ActionBar actionBar;
// Tab titles
private Context context = this;
String[] channel = new String[100];
int i;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.viewpager);
// Initilization
/*context.getSharedPreferences("guardar", 0);
SharedPreferences shared = getSharedPreferences("guardar", 0);
i = shared.getInt("Status_size", 0);
for(int s=1;s<=i;s++) {
channel[s] = (shared.getString("opcionSeleccionada"+s, ""));
}*/
viewPager = (ViewPager) findViewById(R.id.pager);
actionBar = getActionBar();
mAdapter = new TabsPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(mAdapter);
actionBar.setHomeButtonEnabled(false);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
// Adding Tabs
actionBar.addTab(actionBar.newTab().setText(getResources().getString(R.string.emisoras))
.setTabListener(this));
actionBar.addTab(actionBar.newTab().setText(getResources().getString(R.string.estilo))
.setTabListener(this));
actionBar.addTab(actionBar.newTab().setText(getResources().getString(R.string.favoritos))
.setTabListener(this));
/* for (int w=0; w<tabs.length-1; w++) {
actionBar.addTab(actionBar.newTab().setText(tabs[w])
.setTabListener(this));
}*/
/**
* on swiping the viewpager make respective tab selected
* */
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
// on changing the page
// make respected tab selected
actionBar.setSelectedNavigationItem(position);
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
});
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
// on tab selected
// show respected fragment view
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
}
@Override
public void onResume(){
super.onResume();
context.getSharedPreferences("guardar", 0);
SharedPreferences shared = getSharedPreferences("guardar", 0);
i = shared.getInt("Status_size", 0); //i siempre da 1
for(int j=0; j<i; j++) {
channel[j] = shared.getString("opcionSeleccionada"+j, "");
}
}
private-ViewPager-ViewPager;
私人TabsPagerAdapter mAdapter;
私人ActionBar ActionBar;
//标签标题
私有上下文=这个;
字符串[]通道=新字符串[100];
int i;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.viewpager);
//初始化
/*getSharedReferences(“guardar”,0);
SharedReferences shared=getSharedReferences(“guardar”,0);
i=shared.getInt(“状态大小”,0);
对于(ints=1;s首先,我将假设通道[]实际上是私有字符串通道[]
您应该发布所有相关代码,包括所有数组的所有初始化声明,因为此时我不知道通道数组的大小
i = shared.getInt("Status_size", 0); //i siempre da 1
channel[i] = (shared.getString("opcionSeleccionada"+i, ""));
在上面的代码中,您声明正在加载上一个活动中的所有值。但此代码仅加载1个值。它加载键处的字符串“opcionselectionada”+i
进入通道数组的位置i
。因此,如果这是您填充通道数组的唯一位置,则其中只有1个值
要解决这个问题,您需要一个像片段中那样的循环,用共享首选项映射中的正确值填充数组
for(int j=0; j < i; j++) {
channel[j] = shared.getString("opcionSeleccionada"+j, "");
}
您可以将i
作为成员变量删除,并确保在deleteFavs方法中以相同的方式进行设置
我希望这有帮助。愉快地编码试试这将有助于PreferenceManager.GetDefaultSharedReferences(context.edit().putString(“MYLABEL”,“myStringToSave”).commit();谢谢回答。不,通道不是私有变量(因为在这之后我需要在列表3中使用它,如果我使用通道私有,我在列表3中看不到这个值).关于“for”,我证明了这一点,但它仍然不起作用(我也相信您不需要“for”,因为我将此代码放在onRestart(方法)中,并且每次都会更新)好的,所以频道是公共的。关键是它在您的ViewP活动中是一个字符串数组。您没有显示完整的文件,所以有点难以理解。重新启动时,您仍然只填充数组的一个值。请尝试使用onRestart()
而不是onResume()
。您正在1个活动中向共享首选项添加值,当您重新启动主活动时,您从共享首选项中仅获得1个值。因此,您的字符串数组通道将只有1个值,并且由于您在片段中复制了该数组,因此它也有1个值。如果您发布所有代码,我将运行它并显示给您。它仍然不起作用。我正在编辑我的帖子以显示我的所有文件。现在已上载。可能是活动收音机的变量“I”造成了问题…(这是我的直觉告诉我的)从我所能收集到的信息来看,您的假设似乎是正确的。在您的每个无线电活动实例上,变量i都将重置为0。我假设您的每个无线电活动实例都是不同的频道或其他内容,并且您单击的按钮是一个收藏频道的收藏按钮。您可以在addFavs内部执行操作从共享首选项将i初始化为Status\u size的值。然后将其递增并添加您的收藏夹。下班后我会再看一看,但请尝试一下。
public class List3 extends Fragment {
public String seleccion;
private Context context;
private Activity act;
private String[] myValue;
private int y=0;
private boolean primeravez=true;
//private TextView estilo;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.activity_principal3, container, false);
context = getActivity().getApplicationContext();
act = this.getActivity();
Directivo directivo;
ArrayList<Directivo> arraydir2 = new ArrayList<Directivo>();
AdapterDirectivos2 adapter2 = new AdapterDirectivos2(act, arraydir2);
Viewp viewp = (Viewp)getActivity();
myValue = new String[viewp.channel.length];
for (int k=0; k<myValue.length; k++) {
myValue[k]=viewp.channel[k];
}
for(int i=0; i<myValue.length;i++) {
if(myValue[i]!=null) {
if (myValue[i].equals("Esencia Radio"))
adapter2.addItem(getResources().getDrawable(R.drawable.esenciaradio), "Esencia Radio", "Radio General");
else if (myValue[i].equals("I love FM"))
adapter2.addItem(getResources().getDrawable(R.drawable.ilovefm), "I Love FM", "Radio General");
else if (myValue[i].equals("Los 40 Principales"))
adapter2.addItem(getResources().getDrawable(R.drawable.los40principales), "Los 40 Principales", "Radio General");
else if (myValue[i].equals("RAC 105"))
adapter2.addItem(getResources().getDrawable(R.drawable.rac105), "RAC 105", "Radio General");
else if (myValue[i].equals("Sky FM"))
adapter2.addItem(getResources().getDrawable(R.drawable.skyfm), "Sky FM", "Radio General");
else if (myValue[i].equals("Styl FM"))
adapter2.addItem(getResources().getDrawable(R.drawable.stylfm), "Styl FM", "Radio General");
else if (myValue[i].equals("Cocktelera Blues"))
adapter2.addItem(getResources().getDrawable(R.drawable.cocktelerablues), "Cocktelera Blues", "General Blues");
else if (myValue[i].equals("Q fm"))
adapter2.addItem(getResources().getDrawable(R.drawable.qfm), "Q fm", "Jazz/Soul/Blues/Funky");
else if (myValue[i].equals("Radio Clásica RNE"))
adapter2.addItem(getResources().getDrawable(R.drawable.radioclasicarne), "Radio Clásica RNE", "Música Clásica");
else if (myValue[i].equals("Koffee FM"))
adapter2.addItem(getResources().getDrawable(R.drawable.koffeeradio), "Koffee FM", "Chill out");
else if (myValue[i].equals("Ibiza Global Radio"))
adapter2.addItem(getResources().getDrawable(R.drawable.ibizaglobalradio), "Ibiza Global Radio", "House/Dance/Electrónica");
else if (myValue[i].equals("Maxima FM"))
adapter2.addItem(getResources().getDrawable(R.drawable.maximafm), "Maxima FM", "Dance/Música Electrónica");
else if (myValue[i].equals("Cadena Latino"))
adapter2.addItem(getResources().getDrawable(R.drawable.cadenalatino), "Cadena Latino", "Latino/Flamenco");
else if (myValue[i].equals("Chanquete FM"))
adapter2.addItem(getResources().getDrawable(R.drawable.chanquetefm), "Chanquete FM", "Flamenco");
else if (myValue[i].equals("Flamenco Radio"))
adapter2.addItem(getResources().getDrawable(R.drawable.flamencoradio), "Flamenco Radio", "Flamenco");
else if (myValue[i].equals("HotMix Radio"))
adapter2.addItem(getResources().getDrawable(R.drawable.hotmixradiofunky), "HotMix Radio Funky", "Funky Mix");
else if (myValue[i].equals("Sublime FM"))
adapter2.addItem(getResources().getDrawable(R.drawable.sublimefm), "Sublime FM", "Jazz/Soul/Funk/Lounge");
else if (myValue[i].equals("Mix Radio House"))
adapter2.addItem(getResources().getDrawable(R.drawable.mixradiohouse), "Mix Radio House", "House");
else if (myValue[i].equals("Jazz Radio"))
adapter2.addItem(getResources().getDrawable(R.drawable.jazzradio), "Jazz Radio", "Jazz");
else if (myValue[i].equals("SmoothJazz Radio"))
adapter2.addItem(getResources().getDrawable(R.drawable.smoothjazz), "SmoothJazz Radio", "Smooth Jazz");
else if (myValue[i].equals("Canal Fiesta"))
adapter2.addItem(getResources().getDrawable(R.drawable.canalfiesta), "Canal Fiesta", "Pop");
else if (myValue[i].equals("Sky FM "))
adapter2.addItem(getResources().getDrawable(R.drawable.skyfmreggae), "Sky FM ", "Reggae");
else if (myValue[i].equals("Arrow Classic Rock"))
adapter2.addItem(getResources().getDrawable(R.drawable.arrowclassicrock), "Arrow Classic Rock", "Rock");
else if (myValue[i].equals("HotMix Radio Rock"))
adapter2.addItem(getResources().getDrawable(R.drawable.hotmixradiorock), "HotMix Radio Rock", "Rock");
else if (myValue[i].equals("Rock FM"))
adapter2.addItem(getResources().getDrawable(R.drawable.rockfm), "Rock FM", "Rock");
else if (myValue[i].equals("Rock FM Classic"))
adapter2.addItem(getResources().getDrawable(R.drawable.rockfmbelgie), "Rock FM Classic", "Classic Rock");
else if (myValue[i].equals("Virgin Radio"))
adapter2.addItem(getResources().getDrawable(R.drawable.virginradio), "Virgin Radio", "Rock/Hard-Rock");
else if (myValue[i].equals("Trance FM"))
adapter2.addItem(getResources().getDrawable(R.drawable.trancefm), "Trance FM", "Trance");
else if (myValue[i].equals("M80 Radio"))
adapter2.addItem(getResources().getDrawable(R.drawable.m80radio), "M80 Radio", "Best of 70s/80s/90s");
}
}
i = shared.getInt("Status_size", 0); //i siempre da 1
channel[i] = (shared.getString("opcionSeleccionada"+i, ""));
for(int j=0; j < i; j++) {
channel[j] = shared.getString("opcionSeleccionada"+j, "");
}
private void addfavs() {
SharedPreferences shared = getSharedPreferences("guardar", 0);
int i = shared.getInt("Status_size", 0);
i++;
//Toast toast = Toast.makeText(getApplicationContext(), "Bien, metido", Toast.LENGTH_SHORT);
//toast.show();
Bundle bundle=getIntent().getExtras();
String str = bundle.getString("opcionSeleccionada"); // str = Nombre Radio
//String str2= wmbPreference.getString("opcionSeleccionada",str);
SharedPreferences.Editor editor = shared.edit();
editor.putString("opcionSeleccionada"+i, str);
//you do not need to remove a value from shared preferences. If you use the same key then it gets overridden
//editor.remove("Status_size");
editor.putInt("Status_size", i);
editor.commit();// commit is important here.
}