0

Я пытаюсь создать список, щелкнув по кнопке, содержащей избранные. Эти элементы списка создаются с 1 изображением, заголовком и субтитрами.Сохранение строк с SharedPreferences

Моя проблема заключается в следующем: кажется, что при сохранении значений количества элементов, которые будут, оно всегда принимает значение как 1, хотя каждый раз, когда вы нажимаете на кнопку (в состоянии добавить) эта переменная увеличивается и сохраняется в sharedpreferences.

Вклеивания важных частей коды:

List1 (фрагмент активности Viewp)

public class List1 extends Fragment { 
    public String seleccion;  
    private Context context2; 
    private Activity act2; 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     context2 = getActivity().getApplicationContext(); 
     act2 = this.getActivity(); 
     View visor = inflater.inflate(R.layout.activity_principal, container, false); 

    ListView lista = (ListView) visor.findViewById(R.id.listadirectivos); 
    ArrayList<Directivo> arraydir = new ArrayList<Directivo>(); 
    Directivo directivo; 

    // Forma 1: Introduzco los datos por orden alfab�tico 
    /*directivo = new Directivo(getResources().getDrawable(R.drawable.abccountry), "ABC ", "Country"); 
    arraydir.add(directivo); 
    directivo = new Directivo(getResources().getDrawable(R.drawable.abcjazz), "ABC ", "Jazz"); 
    arraydir.add(directivo);*/ 
    directivo = new Directivo(getResources().getDrawable(R.drawable.arrowclassicrock), "Arrow Classic Rock", "Rock"); 
    arraydir.add(directivo); 
    directivo = new Directivo(getResources().getDrawable(R.drawable.canalfiesta), "Canal Fiesta", "Radio Party"); 
    arraydir.add(directivo); 
    directivo = new Directivo(getResources().getDrawable(R.drawable.cadenadial), "Cadena Dial", "Radio General"); 
    arraydir.add(directivo); 
    //........ 

    // Creo el adapter personalizado 

    AdapterDirectivos adapter = new AdapterDirectivos(act2, arraydir); 

    // Lo aplico 
    lista.setAdapter(adapter); 
    lista.setOnItemClickListener(new OnItemClickListener() { 
     public void onItemClick(AdapterView<?> a, View v, int position, long id) { 
      //Link con la radio: en general los que no van son MMS 
      String opcionSeleccionada = 
        ((Directivo)a.getAdapter().getItem(position)).getNombre(); 
      /*if (opcionSeleccionada == "ABC ") { //no va 
       seleccion = "mms://a952.l11289754951.c112897.g.lm.akamaistream.net/D/952/112897/v0001/reflector:54951"; 
      } 
      else if (opcionSeleccionada == "ABC ") { //no va 
       seleccion = "mms://a134.l11289752133.c112897.g.lm.akamaistream.net/D/134/112897/v0001/reflector:52133"; 
      }*/ 
      if (opcionSeleccionada == "Arrow Classic Rock") { //va 
       seleccion = "http://91.221.151.155"; 
      } 
      else if (opcionSeleccionada == "Canal Fiesta") { //va 
        seleccion = "http://195.55.74.207/rtva/canalfiestaradio_master.mp3?GKID=3bfcb56203a811e4a80500163e914f69"; 
       } 
      else if (opcionSeleccionada == "Cadena Dial") { //va 
       seleccion = "http://194.169.201.177:8085/liveDial.mp3"; 
      } 
      //............ 
      Intent i = new Intent(context2, Radio.class); 
      i.putExtra("seleccion", seleccion); 
      i.putExtra("opcionSeleccionada", opcionSeleccionada); 
      startActivity(i); 
     } 

    }); 

    // Look up the AdView as a resource and load a request. 
    AdView adView = (AdView) visor.findViewById(R.id.adView); 
    AdRequest adRequest = new AdRequest.Builder().build(); 
    adView.loadAd(adRequest); 


    return visor; 
} 

}

// "opcionSeleccionada" это имя по названию одного из элементов из списка ListView (используется для создания списка) и «селекция» здесь не имеет значения

Радио (деятельность)

public class Radio extends Activity implements 
MediaPlayer.OnCompletionListener, MediaPlayer.OnPreparedListener, 
MediaPlayer.OnErrorListener, MediaPlayer.OnBufferingUpdateListener { 
    private int j=0; 
    private int i=0; 
    private String TAG = getClass().getSimpleName(); 
    private MediaPlayer mp = null; 
    private boolean dejaractivado=false; 
    private Button play; 
    private ToggleButton favs; 
    private Button stop; 
    private TextView textView; 
    boolean prevencion = false; 

@Override 
public void onCreate(Bundle icicle) { 
    super.onCreate(icicle); 
    setContentView(R.layout.activity_main); 
    textView = (TextView)findViewById(R.id.TextView1); 
    play = (Button) findViewById(R.id.play); 
    stop = (Button) findViewById(R.id.stop); 
    favs = (ToggleButton) findViewById(R.id.favs); 

    play.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View view) { 
      play(); 
     } 
    }); 

    favs.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View view) { 
      if(favs.isChecked()) { 
       addfavs(); 
      } 
      else { 
       delfavs(); 
      } 
     } 
    }); 

    stop.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View view) { 
      stop(); 
     } 
    }); 

    // Look up the AdView as a resource and load a request. 
     AdView adView = (AdView) this.findViewById(R.id.adView); 
     AdRequest adRequest = new AdRequest.Builder().build(); 
     adView.loadAd(adRequest); 

} 

private void play() { 
    Bundle bundle=getIntent().getExtras(); 
    prevencion = true; 
    textView.setText("Conectando con la radio......"); 
    Uri myUri = Uri.parse(bundle.getString("seleccion")); 
    try { 
     if (mp == null) { 
      this.mp = new MediaPlayer(); 
     } else { 
      mp.stop(); 
      mp.reset(); 
     } 
     mp.setDataSource(this, myUri); 
     mp.setAudioStreamType(AudioManager.STREAM_MUSIC); 
     mp.setOnPreparedListener(this); 
     mp.setOnBufferingUpdateListener(this); 
     mp.setOnErrorListener(this); 
     mp.prepareAsync(); 

     Log.d(TAG, "LoadClip Done"); 
    } catch (Throwable t) { 
     Log.d(TAG, t.toString()); 
    } 
} 

@Override 
public void onPrepared(MediaPlayer mp) { 
    Log.d(TAG, "Stream is prepared"); 
    mp.start(); 
    textView.setText(""); 
    /* String aux = (String) MediaStore.Audio.Media.ARTIST; 
    textView.setText("Estas escuchando: "+aux); 
    textView.setText("");*/ 
    j=1; 
} 


private void addfavs() { 
    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 shared = getSharedPreferences("guardar", 0); 
    SharedPreferences.Editor editor = shared.edit();   
    editor.putString("opcionSeleccionada"+i, str); 
    editor.remove("Status_size"); 
    editor.putInt("Status_size", i); 
    editor.commit();// commit is important here. 
} 
private void delfavs() { 
    //it is a prototype: 
    SharedPreferences shared = getSharedPreferences("guardar", 0); 
    SharedPreferences.Editor editor = shared.edit(); 
    editor.remove("opcionSeleccionada"+i); 
    editor.commit();// commit is important here. 
    //String channel = (shared.getString("opcionSeleccionada", "")); 

    //Toast toast = Toast.makeText(getApplicationContext(), channel, Toast.LENGTH_SHORT); 
    //toast.show(); 



    //Toast toast = Toast.makeText(getApplicationContext(), "Mal, sacado", Toast.LENGTH_SHORT); 
    //toast.show(); 
} 

private void stop() { 
    if(j==1) { 
     textView.setText(""); 
     mp.stop(); 
    } 
} 

public void onDestroy() { 
    textView.setText(""); 
    super.onDestroy(); 
     stop(); 
    } 
@Override 
public void onStop() { 
    textView.setText(""); 
    super.onStop(); 
    if(dejaractivado==false) { } 
    else { 
     stop(); 
    } 
    } 

public void onCompletion(MediaPlayer mp) { 
    stop(); 
} 

("я" это значение из любимых предметов, и "opcionSeleccionadai" это имя строки название каждого элемента)

Viewp (активность)

общественного класса Viewp расширяет FragmentActivity орудия ActionBar.TabListener {

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, ""); 
    } 

} 

}

здесь, я загружаю значение, сохраненное в другом классе

List3 (фрагмент Viewp)

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"); 
     } 
    } 

Но, вектор строк MyValue [], как канал [], кажется, что только 1 а остальные значения равны нулю. Из-за этого я думал, что в один момент всего процесса значение «i или Status_size» обновляется или происходит что-то редкое.

Я думаю, что все, если что-то непонятно, скажите мне (мой английский очень плохой). Кто-нибудь может мне помочь? Большое спасибо.

ответ

0

Сначала я буду считать, что канал [] действительно private String channel[] Вы действительно должны опубликовать всю связанную коду, включая все инициализации объявление всех массивов, потому что в данный момент я не знаю размера вашего массива канала.

i = shared.getInt("Status_size", 0); //i siempre da 1 

    channel[i] = (shared.getString("opcionSeleccionada"+i, "")); 

В приведенном выше коде вам сообщается, что вы загружаете все значения из предыдущего действия. Но этот код загружает только 1 значение. Он загружает строку в ключе "opcionSeleccionada"+i в позицию i массива каналов. Поэтому, если это единственное место, где вы заполняете массив каналов, тогда в нем будет только 1 значение.

Чтобы это исправить, нужна петля, как вы делали в фрагменте, чтобы заполнить массив с соответствующими значениями из общего предпочтения карты

for(int j=0; j < i; j++) { 
    channel[j] = shared.getString("opcionSeleccionada"+j, ""); 
} 

внутри addFavs() это сделать

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. 
} 

Вы можете удалить i в качестве переменной-члена и убедиться, что вы установили его таким же образом в методе deleteFavs

Надеюсь, это поможет. Happy Coding

+0

Спасибо, что ответили. Нет, канал не является частной переменной (потому что после этого мне нужно использовать его в List3, и если я делаю канал закрытым, я не вижу эти значения в List3). И про «для» я доказываю это, но он не работает (я также считаю, что вам не нужен «для», потому что я помещаю этот код в метод onRestart (метод), и он обновляется каждый раз) – user3429953

+0

Итак, канал общественности. Ключевой частью является то, что это массив строк в вашей активности ViewP. Вы не показываете полные файлы, так что это немного сложно. При перезапуске вы заполняете только одно значение вашего массива. И вместо использования 'onRestart()' попробуйте использовать 'onResume()'. Вы добавляете значения в общие настройки в 1 действие, и когда вы перезапускаете основное действие, вы получаете только 1 значение из общих настроек. Таким образом, ваши строковые массивы будут иметь только 1 значение, и поскольку вы копируете этот массив во фрагменте, оно также имеет 1 значение. если вы разместите весь свой код, запустите его и покажите. – doubleA

+0

Он все еще не работает. Я редактирую свой пост, чтобы показать все мои файлы. – user3429953

0

попробуйте это поможет PreferenceManager.getDefaultSharedPreferences (контекст) .edit(). PutString ("MYLABEL", "myStringToSave"). Commit();

Смежные вопросы