Favorites android studio without database

3

I have a list with a series of streaming radios and I have to add a favorite button (the typical heart) and when I press it, that radio is saved in another activity (Favorites) and when it leaves and enters the application to save the changes but I'm lost and I can not find a solution.

I have another activity that when you click on the radio, a player opens, but it will not let me put it. But I think that for favorites I do not need to publish that activity.

I attach what I have so far ...

Principal

import android.content.Intent;
import android.graphics.Typeface;
import android.media.MediaPlayer;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;

public class Principal extends AppCompatActivity {

//private Typeface comicBook;

ListView lista;
private MediaPlayer player;

//Vector para añadir los datos de las radios
String [][] datos = {
        {"RadioAnime","Radio Anime station online listen anime music streaming radio anime radio musica anime openings, endings la mejor radio para el j-pop y k-pop.","http://radioanime.radioca.st/stream"},//0
        {"AnimeRadio UK", "Anime Radio UK is the only official radio station dedicated to bringing you the very best music from Japanese anime, video games, film, Jpop, Jrock and everything else inbetween.","http://149.255.59.164:8049/stream"},
        {"Anime Blast Radio", "The newest place for anime music, Anime Blast Radio - Anime Internet Radio. The place for the best streaming anime music.","http://192.99.8.170:6110/stream?icy=http"},
        {"Chiru.no", "Anime Japanese Jpop Video Game","http://142.4.209.132:8000/stream"},
        {"Extreme Anime Radio", "Extreme Anime Radio, Your Anime & J-Pop Radio Station, Playing best top Japanese jpop jrock video game music online, streaming.","http://174.37.159.206:8052/stream?icy=http"},
        {"Otaku Music Radio", "Emisora de radio con la mejor música otaku, j-rock, j-pop..., y las noticias del mundo japonés, del manga y del anime.","http://149.56.240.65:20068/stream?icy=http"},//5
        {"Akihabara Radio", "Música Asiatica, OST de Anime y Covers.","http://176.31.241.17:8814/mp3?icy=http"},
        {"Blue Anime Ivana","Welcome to my Anime Radio Station where you will be able to hear a large amount of Anime music from over 500 different Anime! ","http://listen.radionomy.com:80/BlueAnimeIvana?icy=http"},
        {"AnimeNexus","Radio Anime Nexus, La mejor radio anime de Latinoamérica, J-Pop y J-Rock, con Podcast informativos, Revista otaku y mucho mas.","http://radio.animenexus.mx:8000/animenexus"},
        {"Anime-extremo","Esta radio esta dedicada a todos los fans del anime, aquí se comparten Animes por diversos servidores (Google Drive, Mega, 1fichier, etc.) en HD y BD.","http://192.99.17.12:4708/stream"},
        {"BaKaRadio.Net","La música japonesa, Jpop, Jrock, Anime, Game y muchos más. Escucha música anime en línea las 24 horas.","http://144.217.203.184:8398/stream"},//10
        {"McAnimeRadio","Mc Radio dónde escuchamos nuestra musica favorita ¡Como Tú!","http://198.105.216.204/proxy/mcradio?mp=/;"}

};

//vector para añadir los logos de las emisoras, tiene que estar cada logo en el orden como arriba
int[] datosImg = {R.drawable.logo0,R.drawable.logo1,R.drawable.logo2,R.drawable.logo3,R.drawable.logo4,R.drawable.logo5,
        R.drawable.logo6,R.drawable.logo7,R.drawable.logo8,R.drawable.logo9,R.drawable.logo10,R.drawable.logo11};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_principal);

    //String fuente2 = "fuentes/ComicBook.otf";
    //this.comicBook = Typeface.createFromAsset(getAssets(),fuente2);

    lista = (ListView)findViewById(R.id.lvlista);
    //lista.setFocusable(false);


    //instanciamos y le mandamos los datos
    lista.setAdapter(new Adaptador(this, datos, datosImg));



    lista.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Intent visorRadio = new Intent(Principal.this, PantallaRadio.class);
            visorRadio.putExtra("TIT", datos[position][0]);
            visorRadio.putExtra("URL", datos[position][2]);

            visorRadio.putExtra("IMG", datosImg[position]);

            startActivity(visorRadio);
            overridePendingTransition(R.anim.left_in, R.anim.left_out);


        }
    });
}
}

Adapter

import android.app.Dialog;
import android.content.Context;
import android.graphics.Typeface;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;



public class Adaptador extends BaseAdapter {//esta clase es para asociar los elementos, la que va a controlar nuestro adaptador
private Typeface comicBook;
private static LayoutInflater inflater = null;//Para instanciar el archivo de diseño

Context contexto;//el entorno de la app, todo que utiliza para generar el adaptador
String [][] datos;//matriz para almacenar los datos de la principal
int [] datosImg;//igual que arriba

//Generamos el constructor
public Adaptador (Context contexto, String [][] datos, int [] datosImg){
    this.contexto = contexto;
    this.datos = datos;
    this.datosImg = datosImg;
    //declaramos el inflater y lo inicializamos, con esto instanciamos el xml
    inflater = (LayoutInflater)contexto.getSystemService(contexto.LAYOUT_INFLATER_SERVICE);
    comicBook = Typeface.createFromAsset(contexto.getAssets(), "fuentes/ComicBook.otf");

}

@Override
public View getView(int i, final View convertView, ViewGroup parent) {

    final View vista  = inflater.inflate(R.layout.elemento_lista, null);

    TextView titulo = (TextView)vista.findViewById(R.id.tvTitulo);
    TextView descripcion = (TextView)vista.findViewById(R.id.tvDescripcion);
    ImageView imagen = (ImageView)vista.findViewById(R.id.ivImagen);
    //RatingBar calificacion = (RatingBar)vista.findViewById(R.id.ratingBarRadio);


    titulo.setText(datos[i][0]);
    titulo.setTypeface(comicBook);
    descripcion.setText(datos[i][1]);
    descripcion.setTypeface(comicBook);
    //calificacion.setProgress(Integer.valueOf(datos[i][1]));
    imagen.setImageResource(datosImg[i]);


    imagen.setTag(i);
    imagen.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Dialog dialog = new Dialog(contexto);
            ImageView img = new ImageView(contexto);
            img.setImageResource( datosImg[(Integer)v.getTag()]);
            dialog.addContentView(img,new ViewGroup.LayoutParams(500,500));
            dialog.show();
            //Intent visorImagen = new Intent(contexto, VisorImagen.class);
            //visorImagen.putExtra("IMG", datosImg[(Integer)v.getTag()]);
            //contexto.startActivity(visorImagen);
        }
    });




    return vista;
}



@Override
public int getCount() {
    return datos.length;
}

@Override
public Object getItem(int position) {
    return null;
}

@Override
public long getItemId(int position) {
    return 0;
}


}

element_list.xml

<android.support.constraint.Guideline
    android:id="@+id/guideline"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    app:layout_constraintGuide_begin="6dp" />

<android.support.constraint.Guideline
    android:id="@+id/guideline3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    app:layout_constraintGuide_begin="116dp" />

<android.support.constraint.Guideline
    android:id="@+id/guideline7"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    app:layout_constraintGuide_begin="102dp" />

<TextView
    android:id="@+id/tvTitulo"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginBottom="8dp"
    android:layout_marginTop="8dp"
    android:text="TextView"
    android:textColor="@android:color/background_light"
    android:textSize="30sp"
    app:layout_constraintBottom_toTopOf="@+id/guideline3"
    app:layout_constraintStart_toStartOf="@+id/guideline7"
    app:layout_constraintTop_toTopOf="@+id/guideline"
    app:layout_constraintVertical_bias="0.037" />

<ImageView
    android:id="@+id/ivImagen"
    android:layout_width="70dp"
    android:layout_height="70dp"
    android:layout_marginBottom="8dp"
    android:layout_marginEnd="8dp"
    android:layout_marginLeft="8dp"
    android:layout_marginRight="8dp"
    android:layout_marginStart="8dp"
    android:layout_marginTop="8dp"
    app:layout_constraintBottom_toTopOf="@+id/guideline3"
    app:layout_constraintEnd_toStartOf="@+id/guideline7"
    app:layout_constraintHorizontal_bias="0.376"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="@+id/guideline"
    app:layout_constraintVertical_bias="0.529"
    app:srcCompat="@drawable/logo0" />

<TextView
    android:id="@+id/tvDescripcion"
    android:layout_width="264dp"
    android:layout_height="56dp"
    android:layout_marginBottom="8dp"
    android:layout_marginTop="8dp"
    android:alpha=".7"
    android:text="TextView"
    android:textColor="@android:color/background_light"
    android:textSize="10sp"
    app:layout_constraintBottom_toTopOf="@+id/guideline3"
    app:layout_constraintStart_toStartOf="@+id/guideline7"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="1.0" />

activity_principal.xml

<ListView
    android:id="@+id/lvlista"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

It's my first post, if I have to attach something else to notify me.

Thanks in advance.

    
asked by Hach3 02.05.2018 в 20:49
source

1 answer

4

Use SharedPreferences to save values and recover when you re-enter. It is what is used for example to remember users, remember customizations of the user etc ...

It works by associating information with a key, for example

("numero de casas","seis")
("coches rojos", 7)

//La declaras

private SharedPreferences shared;

//La instancias, si no existe, se crea, si existe, se recupera.
shared = getSharedPreferences("shared", MODE_PRIVATE);

To put data in the share you need an editor, the instances, you add data which can be int, string ... and commit, important!

SharedPreferences.Editor editor = shared.edit();
editor.putString("clave","valor");
editor.commit();

You can also remove them

editor.remove("clave");

To recover them you must search for them by the key, and if they do not exist, return one by default

share.getString("clave","defecto");
    
answered by 02.05.2018 / 20:54
source