Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
disx
18 / 18 / 0
Регистрация: 26.02.2014
Сообщений: 406
08.01.2015, 20:02     Как привязать к выбранным пунктам Spiner разные ListView? #1
Как привязать к выбранным пунктам Spiner разные ListView? т.е. не могу понять каким способом...

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

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

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

да, и как обновлять данные выбираемых списков в одном активити?
androbro
313 / 273 / 51
Регистрация: 17.10.2014
Сообщений: 820
29.01.2015, 11:52     Как привязать к выбранным пунктам Spiner разные ListView? #5
disx, у Вас информация сильно отличается в зависимости от выбранного пункта spinner'a?
Цитата Сообщение от disx Посмотреть сообщение
да, и как обновлять данные выбираемых списков в одном активити?
удаляете adpater, вешаете новый.
disx
18 / 18 / 0
Регистрация: 26.02.2014
Сообщений: 406
29.01.2015, 12:56  [ТС]     Как привязать к выбранным пунктам Spiner разные ListView? #6
androbro,
у Вас информация сильно отличается в зависимости от выбранного пункта spinner'a?
нет, только текстом.
androbro
313 / 273 / 51
Регистрация: 17.10.2014
Сообщений: 820
29.01.2015, 13:38     Как привязать к выбранным пунктам Spiner разные ListView? #7
disx, ну если вообще все идентично ничего переопределять и удалять не нужно.
Коллекцию(которая связана с адаптером) заполняйте информацией соответствующей выбранному элементу и вызываете у него
Java
1
adapter.notifyDataSetChanged()
Hedd
13 / 13 / 2
Регистрация: 21.01.2015
Сообщений: 129
02.02.2015, 19:47     Как привязать к выбранным пунктам Spiner разные ListView? #8
Все верно. Вам хватит 1 spinner и 1 listView. Если у вас одинаковая разметка лейаута listView, просто заполняйте его данными по клику на каждый пункт в спиннере.
disx
18 / 18 / 0
Регистрация: 26.02.2014
Сообщений: 406
09.02.2015, 23:32  [ТС]     Как привязать к выбранным пунктам Spiner разные ListView? #9
androbro,
удаляете adpater, вешаете новый.
Сори, как повесить понятно, а удалить adapter как?
Rube
910 / 558 / 87
Регистрация: 13.02.2014
Сообщений: 2,068
10.02.2015, 08:02     Как привязать к выбранным пунктам Spiner разные ListView? #10
Не надо ничего удалять, заполняете адаптер новыми данными и notifyDataSetChanged().
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
10.02.2015, 09:15     Как привязать к выбранным пунктам Spiner разные ListView? #11
Rube, оговорился похоже.
Заполняете источник данных для адаптера новыми данными.

Не получается?
Где код?
Rube
910 / 558 / 87
Регистрация: 13.02.2014
Сообщений: 2,068
10.02.2015, 10:50     Как привязать к выбранным пунктам Spiner разные ListView? #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;
    }
}
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
10.02.2015, 10:55     Как привязать к выбранным пунктам Spiner разные ListView? #13
Цитата Сообщение от Armagedo Посмотреть сообщение
Не получается?
Где код?
Это было адресованно не вам.
Rube
910 / 558 / 87
Регистрация: 13.02.2014
Сообщений: 2,068
10.02.2015, 11:06     Как привязать к выбранным пунктам Spiner разные ListView? #14
Пускай ТС пользуется
disx
18 / 18 / 0
Регистрация: 26.02.2014
Сообщений: 406
10.02.2015, 15:57  [ТС]     Как привязать к выбранным пунктам Spiner разные ListView? #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'вский пример обязательно разберу, просто пока в Кастомных адаптерах не совсем врубаюсь, а че за
ТС
кстати?
Rube
910 / 558 / 87
Регистрация: 13.02.2014
Сообщений: 2,068
11.02.2015, 08:03     Как привязать к выбранным пунктам Spiner разные ListView? #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);//курсор второй таблицы
disx
18 / 18 / 0
Регистрация: 26.02.2014
Сообщений: 406
11.02.2015, 13:12  [ТС]     Как привязать к выбранным пунктам Spiner разные ListView? #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)
подскажите че, чтоб додушить вопрос, пожалуйста?
Rube
910 / 558 / 87
Регистрация: 13.02.2014
Сообщений: 2,068
11.02.2015, 15:30     Как привязать к выбранным пунктам Spiner разные ListView? #18
Я имел ввиду, что если при нажатии на любой итем спиннера всегда должны меняться данные на экране, то проверять ифы смысла нет.
arg это и есть/равен Predmet[selectedItemPosition], т.е. типа аргумент, можете хоть как назвать
немножко я описался, надо так void Rus(String arg)

А это зачем так, вообще не понял, да и из цифры получать строку зачем
Java
1
2
id_predm=selectedItemPosition;                
arg=getString(id_predm)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.02.2015, 16:15     Как привязать к выбранным пунктам Spiner разные ListView?
Еще ссылки по теме:

Скроллинг ViewPager-а как у ListView Android
Как перевернуть ListView? Android
Android View Pager разные фрагменты на страницах, не понимаю как?
Android Как привязать приложение к ВК?
Android Как привязать Location к Button

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

Или воспользуйтесь поиском по форуму:
disx
18 / 18 / 0
Регистрация: 26.02.2014
Сообщений: 406
11.02.2015, 16:15  [ТС]     Как привязать к выбранным пунктам Spiner разные ListView? #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/ а если я Вашу мысль так и не понял, ну тада пример в личку плиз, А ТЕМУ МОЖНО ЗАКРЫВАТЬ!
Yandex
Объявления
11.02.2015, 16:15     Как привязать к выбранным пунктам Spiner разные ListView?
Ответ Создать тему
Опции темы

Текущее время: 05:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru