2015-10-02 2 views
0

У меня есть набор, который содержит список строк:Каков наилучший способ передать набор другой активности. Java Android SDK

public Set<String> favs = new HashSet<>(); 

Однако, когда я начинаю другой вид деятельности «Избранные» Я хочу, чтобы передать этот список в мой класс «Favorties», в настоящее время у меня есть:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 


    if (id == R.id.action_settings) { 
     return true; 
    } else if (id == R.id.exit_the_app) { 
     finish(); 
     return true; 
    } else if (id == R.id.favorites) { 
     Intent startfavs = (new Intent(Insulter.this, Favorites.class)); 
     startActivity(startfavs); 
     return true; 
     } 
return super.onOptionsItemSelected(item); 
} 

Я хочу передать этот набор в «избранное» и в конечном итоге отобразить его в виде списка после его изменения в список. Каким будет лучший способ сделать это?

(Примечание: Моя вторая деятельность все настройки в коллекторе и работает отлично)

+0

вам придется использовать намерения и намерения дополнительно. Я рекомендую вам подробнее изучить их [здесь] (http://www.vogella.com/tutorials/AndroidIntent/article.html). –

+0

Возможный дубликат [Как использовать putExtra() и getExtra() для строковых данных] (http://stackoverflow.com/questions/5265913/how-to-use-putextra-and-getextra-for-string-data) –

+0

передать его как сериализуемый в связке для активности –

ответ

1

В вашей первой деятельности под названием обидчик, добавьте это,

Intent startfavs = (new Intent(Insulter.this, Favorites.class)); 
String[] objects = new String[set.size()]; 
set.toArray(objects); 
final ArrayList<String> list = new ArrayList<String>(Arrays.asList(objects)); 
startfavs.putStringArrayListExtra("favs",list); 
startActivity(startfavs); 

В вашей второй деятельности под названием Избранное, чтобы get the param,

ArrayList<String> favs = getIntent().getStringArrayListExtra("favs"); 
+0

Итак, я передаю список массивов строк, правильно? Однако, когда я добавляю второй кусок кода во второй активности, getIntent идет красным и не может разрешить символ getIntent. Есть идеи? – James

+0

Извините, не 'getIntent', это' getIntent() ' – starkshang

0

Можно использовать дополнительные данные, прежде чем использовать их для начала другого действия. Класс Intent предоставляет метод putExtra() для добавления в него дополнительных данных.

putExtra() метод имеет несколько перегруженных, потому что вы спрашиваете конкретно о пропускании Set, это один, вероятно, наиболее актуальны:

public Intent putExtra (String name, Serializable value)

Более подробно проверить это: putExtra(String name, Serializable value)

Поскольку вы используете HashSets, передаете объект favs, так как он должен работать нормально, так как HashSet реализует Serializable.

Так что ваш код будет выглядеть примерно так:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 


    if (id == R.id.action_settings) { 
     return true; 
    } else if (id == R.id.exit_the_app) { 
     finish(); 
     return true; 
    } else if (id == R.id.favorites) { 
     Intent startfavs = (new Intent(Insulter.this, Favorites.class)); 
     startfavs.putExtra("favs_set", favs); 
     startActivity(startfavs); 
     return true; 
     } 
return super.onOptionsItemSelected(item); 
} 

Не забывайте, что вы также должны получить эти данные, поэтому в вашей Favorites деятельности, на onCreate() методе вы извлечение данных с помощью

public Serializable getSerializableExtra (String name)

Соответствующий фрагмент кода будет выглядеть примерно так:

getExtras().getSerializableExtra("favs_set");

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