Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
disx
23 / 23 / 0
Регистрация: 26.02.2014
Сообщений: 579
Записей в блоге: 1
#1

Как привязать к выбранным пунктам Spiner разные ListView? - Программирование Android

08.01.2015, 20:02. Просмотров 638. Ответов 18
Метки нет (Все метки)

Как привязать к выбранным пунктам Spiner разные ListView? т.е. не могу понять каким способом...

В одном активити нужно по выбору пункта в спинере отобразить разные ListView...

Помогите пожалуйста?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.01.2015, 20:02
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как привязать к выбранным пунктам Spiner разные ListView? (Программирование Android):

Spiner как проверить выбранный пункт
Здравствуйте, у меня есть Spiner со списком, выбранный элемент задаю TextView-у...

Получение значения из spiner
Как можно получить значение из спайнера? То есть сначала выбираем элементы в...

Передача значения из SPiner
В диалоге происходит выбор названия таблицы в Spiner списке. По нажатию кнопки...

Утечка памяти в Spiner
Здравствуйте. Создал новый проект в Layout добавил выпадающий список в ресурсы...

Как привязать коллекцию к ListView
Возникла проблема создания привязки к ListView этой коллекции: using...

Как привязать массив к ListView
1. Есть массив List<MyClass>. У этого класса есть несколько свойств. Как...

18
disx
23 / 23 / 0
Регистрация: 26.02.2014
Сообщений: 579
Записей в блоге: 1
29.01.2015, 09:40  [ТС] #2
выбираем в Spinner selectedItemPosition - "№1", "№2" и т.д., как отобразить в этом же активити разные ListView в зависимости от выбранного,.... подскажите в какую сторону глядеть?

P/S/ есть идея написать методы для каждого ListView в котором реализовать его создание, но как это сделать и как его запускать слабо представляю, подскажите кто в курсе?
0
androbro
340 / 301 / 67
Регистрация: 17.10.2014
Сообщений: 887
29.01.2015, 10:21 #3
disx, как мне кажется Вам будет достаточно в разметке одного spinner'a и одного ListView.
Выбираем item в spinner'e, получаем соответствующий набор данных(коллекцию как вариант), скармливаем его adapter'у.
Единственное что если наборы данных будут существенно отличатся друг от друга. Тогда необходимо либо переопределить adapter, либо в зависимости от выбранного набора данных устанавливать в ListView соответствующую разметку.
Цитата Сообщение от disx Посмотреть сообщение
P/S/ есть идея написать методы для каждого ListView в котором реализовать его создание, но как это сделать и как его запускать слабо представляю, подскажите кто в курсе?
Вы имеете ввиду переопределить adapter?
0
disx
23 / 23 / 0
Регистрация: 26.02.2014
Сообщений: 579
Записей в блоге: 1
29.01.2015, 10:34  [ТС] #4
androbro, если правильно понимаю да, т.е. написать для каждого Листа свой адаптер, и по выбору пункта вешать на листвью нужный адаптер,...

да, и как обновлять данные выбираемых списков в одном активити?
0
androbro
340 / 301 / 67
Регистрация: 17.10.2014
Сообщений: 887
29.01.2015, 11:52 #5
disx, у Вас информация сильно отличается в зависимости от выбранного пункта spinner'a?
Цитата Сообщение от disx Посмотреть сообщение
да, и как обновлять данные выбираемых списков в одном активити?
удаляете adpater, вешаете новый.
0
disx
23 / 23 / 0
Регистрация: 26.02.2014
Сообщений: 579
Записей в блоге: 1
29.01.2015, 12:56  [ТС] #6
androbro,
у Вас информация сильно отличается в зависимости от выбранного пункта spinner'a?
нет, только текстом.
0
androbro
340 / 301 / 67
Регистрация: 17.10.2014
Сообщений: 887
29.01.2015, 13:38 #7
disx, ну если вообще все идентично ничего переопределять и удалять не нужно.
Коллекцию(которая связана с адаптером) заполняйте информацией соответствующей выбранному элементу и вызываете у него
Java
1
adapter.notifyDataSetChanged()
0
Hedd
13 / 13 / 2
Регистрация: 21.01.2015
Сообщений: 131
02.02.2015, 19:47 #8
Все верно. Вам хватит 1 spinner и 1 listView. Если у вас одинаковая разметка лейаута listView, просто заполняйте его данными по клику на каждый пункт в спиннере.
0
disx
23 / 23 / 0
Регистрация: 26.02.2014
Сообщений: 579
Записей в блоге: 1
09.02.2015, 23:32  [ТС] #9
androbro,
удаляете adpater, вешаете новый.
Сори, как повесить понятно, а удалить adapter как?
0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,072
10.02.2015, 08:02 #10
Не надо ничего удалять, заполняете адаптер новыми данными и notifyDataSetChanged().
0
Armagedo
209 / 209 / 60
Регистрация: 22.08.2014
Сообщений: 644
10.02.2015, 09:15 #11
Rube, оговорился похоже.
Заполняете источник данных для адаптера новыми данными.

Не получается?
Где код?
1
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,072
10.02.2015, 10:50 #12
Вот код
ActivityMain
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
 
    /********************** Spinner (дни недели) *************************/
    final Spinner spinner = (Spinner)findViewById(R.id.spinner_drawer_day);     
 
    /********************** Установки Spinner ***************************/
    final String[] days = getResources().getStringArray(R.array.days); // дни недели            
    CustomAdapterSpinner adapter = new CustomAdapterSpinner(this, days);        
    spinner.setAdapter(adapter);    
 
    /********************** Слушаем Spinner ***************************/
    spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
        public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {              
            Log.d("", days[i]); // выбранный в spinner день недели          
        }                   
        public void onNothingSelected(AdapterView<?> adapterView) {  }
    }); 
}

CustomAdapterSpinner
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public class CustomAdapterSpinner extends ArrayAdapter<String> {
    private final String[] values;
 
    public CustomAdapterSpinner(Context context, String[] values) {
        super(context, R.layout.spinner_dropdown_item, values);
        this.values = values;
    }
 
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        return newView(position, convertView, parent, R.layout.spinner);
    }
 
    @Override
    public View getDropDownView(int position, View convertView, ViewGroup parent) {
        return newView(position, convertView, parent,
                R.layout.spinner_dropdown_item);
    }
 
    private View newView(int position, View convertView, ViewGroup parent,
            int layout) {
        View view = convertView;
        LayoutInflater inflater = (LayoutInflater) getContext()
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = inflater.inflate(layout, parent, false);
        TextView textView = (TextView) convertView.findViewById(R.id.day);
        textView.setText(values[position]);
        return view;
    }
}
0
Armagedo
209 / 209 / 60
Регистрация: 22.08.2014
Сообщений: 644
10.02.2015, 10:55 #13
Цитата Сообщение от Armagedo Посмотреть сообщение
Не получается?
Где код?
Это было адресованно не вам.
0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,072
10.02.2015, 11:06 #14
Пускай ТС пользуется
0
disx
23 / 23 / 0
Регистрация: 26.02.2014
Сообщений: 579
Записей в блоге: 1
10.02.2015, 15:57  [ТС] #15
Rube, Armagedo, Здорова парни!

это я тут интересного пропустил ?!

короче вчера как-то так наковырял:
Java
1
2
3
4
5
6
7
public void onItemSelected(AdapterView<?> parent,
                    View itemSelected, int selectedItemPosition, long selectedId) {
                if ( Predmet[selectedItemPosition] == "Русский") {
                    Rus();
}
return;
                }
метод так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void Rus(){
    //получаем курсор
    cursor = db.getAllData2();//курсор второй таблицы
    startManagingCursor(cursor);
    // формируем столбцы сопоставления
    String[] from = new String[] { DB.COLUMN_IMG2, DB.COLUMN_TXT2 };
    int[] to = new int[] { R.id.ivImg, R.id.tvText };
    @SuppressWarnings("deprecation")
    SimpleCursorAdapter adapterR = new SimpleCursorAdapter(this, R.layout.item, cursor, from, to);
    lvData2=(ListView)findViewById(R.id.lvData);
    lvData2.setAdapter(adapterR);
adapterR.notifyDataSetChanged();
 
    cursor.requery();
}
и все работает(по выбору в спинере листает листы, ну заполняет данными из разных таблиц), только прошу уважаемые, окинуть взглядом на предмет "ровности кода" может покрасивше можно, или мож что лишнее?

Rube'вский пример обязательно разберу, просто пока в Кастомных адаптерах не совсем врубаюсь, а че за
ТС
кстати?
0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,072
11.02.2015, 08:03 #16
ТС топикстартер, он же аскер, он же создавший тему.

Добавлено через 4 минуты
Цитата Сообщение от disx Посмотреть сообщение
просто пока в Кастомных адаптерах не совсем врубаюсь
Там ничего сложного, зато можно картинки-иконки вставлять, я тоже недавно их не понимал.

Добавлено через 5 минут
Цитата Сообщение от disx Посмотреть сообщение
окинуть взглядом
Я бы сделал так,
Java
1
2
3
4
5
//вместо
if ( Predmet[selectedItemPosition] == "Русский")
    Rus();
// сразу бы передавал аргумент и ставил плюс парням
Rus(Predmet[selectedItemPosition]);
А в методе получал бы данные в зависимости от выбранного итема в спиннере
Java
1
2
3
void Rus(arg) {
    //тут тоже ставим плюс парням
    cursor = db.getAllData2(arg);//курсор второй таблицы
1
disx
23 / 23 / 0
Регистрация: 26.02.2014
Сообщений: 579
Записей в блоге: 1
11.02.2015, 13:12  [ТС] #17
Rube,
ТС топикстартер, он же аскер, он же создавший тему.
ну я и темный
Java
1
2
// за мной не "заржавеет"
Rus(Predmet[selectedItemPosition]);
т.е. if не надо? просто метод в onItemSelected вставить?

А в методе получал бы данные в зависимости от выбранного итема в спиннере
Не догнал что у нас arg, если это:
Java
1
2
3
id_predm=selectedItemPosition;
                
                arg=getString(id_predm)//это строка 63;
, то оно того сыпется, либерально высказывая
at com.cribactivity.DB_Activity$1.onItemSelected(DB_Activity.java:63)
подскажите че, чтоб додушить вопрос, пожалуйста?
0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,072
11.02.2015, 15:30 #18
Я имел ввиду, что если при нажатии на любой итем спиннера всегда должны меняться данные на экране, то проверять ифы смысла нет.
arg это и есть/равен Predmet[selectedItemPosition], т.е. типа аргумент, можете хоть как назвать
немножко я описался, надо так void Rus(String arg)

А это зачем так, вообще не понял, да и из цифры получать строку зачем
Java
1
2
id_predm=selectedItemPosition;                
arg=getString(id_predm)
1
disx
23 / 23 / 0
Регистрация: 26.02.2014
Сообщений: 579
Записей в блоге: 1
11.02.2015, 16:15  [ТС] #19
Rube, короче, получилось так:

в onItemSelected:
Java
1
2
arg = Predmet[selectedItemPosition];
                Rus(arg);
в void Rus (String arg) так:
Java
1
2
3
4
5
if (arg == "Русский") {
.....}
if (arg == "Математика") {
...}
.....
и все работает меняются списки, Спасибо.

P/S/ а если я Вашу мысль так и не понял, ну тада пример в личку плиз, А ТЕМУ МОЖНО ЗАКРЫВАТЬ!
1
11.02.2015, 16:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.02.2015, 16:15
Привет! Вот еще темы с решениями:

Как получить таблицу из БД и привязать к Listview
Здравствуйте! Можете объяснить как получить таблиу из xds-базы данных и...

LiveBinding, как привязать ObjectList<T> к ListView?
Можно пример как привязать ObjectList&lt;T&gt; к ListView? Где T выглядит так: ...

Как к идентификатору привязать страницу и каждому номеру Id писать разные вещи?
Навеяло отсюда http://www.cyberforum.ru/php-beginners/thread124304.html Все...

Как разнести на разные столбцы listview
foreach (..) { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru