Здравствуйте. Я все пытаюсь реализовать добавление в избранное. Что у меня на данный момент есть. Список ListView который загружает данные из ресурса string.xml. Обработчик нажатия - при нажатии на пункт списка открывается второе Активити с полным текстом.
Также во втором Активити есть кнопка, при нажатии на которую сохраняется с помощью SharedPreferences, номер позиции ListView.
В первом Активити сверху есть кнопка избранное при нажатии на которую будут оставаться в активити только те пункты которые добавил в избранное.
Так вот я нажал на заголовок списка, открылось второе активити, далее нажимаю на кнопку, сохраняется номер позиции, возвращаюсь в первое активити, теперь нажимаю на кнопку избранное получаю из SharedPreferences, номер позиции.
Вопрос как теперь отфильтровать ListView, что бы в списки были только те пункты которые были сохранены в SharedPreferences?
Ну и второй вопрос как в SharedPreferences, сохранять несколько пунктов, при нажатии на кнопку.
Не знаю правильной ли я вообще пошел дорогой, может это как-то по другому можно было реализовать.
Код первого активити со списком
public class MainActivity extends AppCompatActivity {
ListView listView;
// переменная, представляющая экземпляр класса SharedPreferences
SharedPreferences mSettings;
// это будет именем файла настроек
public static final String APP_PREFERENCES = "mysettings";
// имя кота
public static final String APP_PREFERENCES_NAME = "Nickname";
TextView tvInfo;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
// получаем экземпляр элемента ListView
listView = (ListView)findViewById(R.id.listView);
// инициализирем эту переменную
// в скобках - название вашего файла и стандартное разрешение
mSettings = getSharedPreferences(APP_PREFERENCES, Context.MODE_PRIVATE);
tvInfo = (TextView)findViewById(R.id.tvInfo);
// определяем массив типа String
// заголовок
final String[] catnames = getResources().getStringArray(R.array.cat_names);
// два списка которые откроются во втором активити
final String[] catnames2 = getResources().getStringArray(R.array.cat_names2);
final String[] catnames3 = getResources().getStringArray(R.array.cat_names3);
// используем адаптер данных
final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.item, catnames);
listView.setAdapter(adapter);
// массив количество элементов
final int[] mice = new int [catnames.length];
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View itemClicked, int position,long id) {
TextView textView = (TextView) itemClicked;
// получаем текст нажатого элемента
String strText = textView.getText().toString();
Intent intent = new Intent(MainActivity.this, LastActivity.class);
// получаем пункт нажатого элемента
int intText = position;
String str = Integer.toString(intText);
intent.putExtra("punkt", str);
for(int x=0;x<catnames.length;x++){
mice[x]=x; // заполняем массив
System.out.println(mice[x]); // выводим массив в цикле
if (strText == catnames[x]) {
// Запускаем активность, связанную с определенным именем кота
// для отправки в другой класс. Ключ и значение(то что в поле editText)
intent.putExtra("name1", catnames[x]);
intent.putExtra("name2", catnames2[x]);
intent.putExtra("name3", catnames3[x]);
startActivity(intent);
}
}
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
//searchView.setOnQueryTextListener(textChangeListener);
return super.onCreateOptionsMenu(menu);
}
// кнопка избранное
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_favorite) {
if(mSettings.contains(APP_PREFERENCES_NAME)) {
// выводим данные в TextView
tvInfo.setText(mSettings.getString(APP_PREFERENCES_NAME, ""));
}
return true;
}
return super.onOptionsItemSelected(item);
}
}
Второе активити с полным текстом и с кнопкой добавить в избранное
public class LastActivity extends AppCompatActivity {
TextView textView;
TextView textView2;
TextView textView3;
TextView textView4;
String name1;
String name2;
String name3;
String name4;
// переменная, представляющая экземпляр класса SharedPreferences
SharedPreferences mSettings;
// это будет именем файла настроек
public static final String APP_PREFERENCES = "mysettings";
// имя кота
public static final String APP_PREFERENCES_NAME = "Nickname";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_last);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
// инициализирем эту переменную
// в скобках - название вашего файла и стандартное разрешение
mSettings = getSharedPreferences(APP_PREFERENCES, Context.MODE_PRIVATE);
// находим в коде
textView = (TextView) findViewById(R.id.textView);
textView2 = (TextView) findViewById(R.id.textView2);
textView3 = (TextView) findViewById(R.id.textView3);
textView4 = (TextView) findViewById(R.id.punkt);
// получаем Intent извликаем из него объект
Intent intent = getIntent();
// извлекаем из него объект
name1 = intent.getStringExtra("name1");
name2 = intent.getStringExtra("name2");
name3 = intent.getStringExtra("name3");
name4 = intent.getStringExtra("punkt");
// выводим полученные данные
textView.setText(name1);
textView2.setText(name2);
textView3.setText(name3);
// кнопка добавить в избранное
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(LastActivity.this, getString(R.string.action_favorite), Toast.LENGTH_LONG).show();
// SharedPreferences.Editor - редактировать
SharedPreferences.Editor editor = mSettings.edit();
// сохраняем его через метод putString() (есть также putLong(), putBoolean() и т.п.)
editor.putString(APP_PREFERENCES_NAME, name4);
// commit() или apply() чтобы изменение вступила в силу
editor.apply();
}
});
}

