Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
69 / 62 / 13
Регистрация: 10.01.2012
Сообщений: 508

Двухуровневый список выбора (Spinner) "Страна->Город" c применением SQLite

01.11.2016, 11:36. Показов 1612. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите пожалуйста в каком виде создавать данные в БД и как правильно переработать файлы чтоб выводить список стран и городов черпая данные из SQLite, а не из .списка.
Может где то есть пример подобного решения?

Файл java

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
public class TetFirstJabRegActivity extends Activity implements AdapterView.OnItemSelectedListener, View.OnClickListener {
 
 
    private TableRow tableRow0;
    private TextView candidatInfoTV;
    private TableRow tableRow1;
    private TextView countryTextView;
    Spinner spinnerCountry;
    private TableRow tableRow2;
    private TextView citytextView;
    Spinner spinnerCity;
    private TableRow tableRow3;
    private TextView phonetextView2;
    private TableRow tableRow4;
    private TextView carModelTextView;
    private TableRow tableRow5;
    private String pseudo_tag;
    private TextView jabberUserLabel;
    private TextView jabberPasswordLabel;
    private int posCountryId;
    private String serverField;
    private String dispField;
    private int city;
    private String user;
    private String pass;
    private String server;
    private String disp;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 
        android.util.Log.d(TetGlobalData.TAG_TET_A_TET, "=========== START  TetFirstJabRegActivity ===============");
 
        String action = getClass().getCanonicalName();
        int pos = action.lastIndexOf('.') + 1;
        String onlyClass = action.substring(pos);
        pseudo_tag = onlyClass;
        Log.e(pseudo_tag, "###  this.getTaskId() = " + this.getTaskId() + "");
 
        setContentView(R.layout.activity_tet_first_jab_reg);
 
        
        countryTextView = (TextView) findViewById(R.id.countryTextView);
        tableRow2 = (TableRow) findViewById(R.id.tableRow2);
        citytextView = (TextView) findViewById(R.id.citytextView);
        tableRow3 = (TableRow) findViewById(R.id.tableRow3);
        jabberUserLabel = (TextView) findViewById(R.id.jabberUserLabel);
        tableRow4 = (TableRow) findViewById(R.id.tableRow4);
        jabberPasswordLabel = (TextView) findViewById(R.id.jabberPasswordLabel);
        tableRow5 = (TableRow) findViewById(R.id.tableRow5);
        spinnerCountry = (Spinner) findViewById(R.id.spinnerCountry);
        spinnerCity = (Spinner) findViewById(R.id.spinnerCity);
        spinnerCountry.setOnItemSelectedListener(this);
        findViewById(R.id.jabberOkButton).setOnClickListener(this);
        findViewById(R.id.buttoniHaveNotLogin).setOnClickListener(this);
        findViewById(R.id.buttonExit).setOnClickListener(this);
    }
 
    @Override
    public void onItemSelected(AdapterView<?> parent, View arg1, int pos,
                               long arg3) {
        Log.e(pseudo_tag, "runing  onItemSelected");
        posCountryId = pos;
        parent.getItemAtPosition(pos);
        if (pos == 1) {
            ArrayAdapter<CharSequence> adapter = ArrayAdapter
                    .createFromResource(this, R.array.city_ru_arrays,
                            android.R.layout.simple_spinner_item);
            spinnerCity.setAdapter(adapter);
        } else if (pos == 2) {
            ArrayAdapter<CharSequence> adapter = ArrayAdapter
                    .createFromResource(this, R.array.city_ua_arrays,
                            android.R.layout.simple_spinner_item);
            spinnerCity.setAdapter(adapter);
        } else if (pos == 3) {
            ArrayAdapter<CharSequence> adapter = ArrayAdapter
                    .createFromResource(this, R.array.city_by_arrays,
                            android.R.layout.simple_spinner_item);
            spinnerCity.setAdapter(adapter);
        } else if (pos == 4) {
            ArrayAdapter<CharSequence> adapter = ArrayAdapter
                    .createFromResource(this, R.array.city_by_arrays,
                            android.R.layout.simple_spinner_item);
            spinnerCity.setAdapter(adapter);
        }
 
 
        spinnerCity.setOnItemSelectedListener(
 
                new AdapterView.OnItemSelectedListener() {
                    @Override
 
                    public void onItemSelected(AdapterView<?> parent, View itemSelected,
 
                                               int selectedltemPosition, long selectedId) {
 
                        parent.getItemAtPosition(selectedltemPosition);
                        String pos = (String) parent.getItemAtPosition(selectedltemPosition);
                        int posID = (int) parent.getSelectedItemPosition();
 
                        TetTempoDate.temp_str_1 = pos;
 
                        Log.e(pseudo_tag, "spinn pos=" + pos + "  posID=" + posID + "");
 
                        setServer(posCountryId, posID);
                    }
 
                    @Override
                    public void onNothingSelected(AdapterView<?> parent) {
 
                    }
 
                    //… Other required overrides
 
                });
    }
 
    private void setServer(int posCountryId, int pos) {
 
        if (posCountryId == 1) { // Rusian federation
            city = pos;
            switch (pos) {
                case 1:
                    break;
                case 2:
                    break;
                case 3:
                    break;
                case 4:
                    break;
                case 5:
                    break;
                case 6:
                    break;
                case 7:
                    serverField = "brd.tet-a-tet.mobi";
                    dispField = "ustyug";
                    break;
                case 8:
                    break;
                case 9:
                    break;
                case 10:
                    break;
                case 11:
                    break;
                default:
                    break;
            }
 
        } else if (posCountryId == 2) { // Ukrain
            city = pos;
 
            switch (pos) {
                case 1:
                    break;
                case 2:
                    // Berdichev
                    serverField = "brd.tet-a-tet.mobi";
                    dispField = "tetatet";
                    break;
                case 3:
                    break;
                case 4:
                    break;
                case 5:
                    break;
                case 6:
                    break;
                case 7:
                    break;
                case 8:
                    break;
                case 9:
                    break;
                case 10:
                    break;
                case 11:
                    break;
                default:
                    break;
            }
        } else if (posCountryId == 3) { // Belarus
            city = pos;
            switch (pos) {
                case 1:
                    break;
                case 2:
                    break;
                case 3:
                    break;
                case 4:
                    break;
                case 5:
                    break;
                case 6:
                    break;
                case 7:
                    break;
                case 8:
                    break;
                case 9:
                    break;
                case 10:
                    break;
                case 11:
                    break;
                default:
                    break;
            }
        }
 
        
    }
 
 
    private void setTemp() {
        TextView phoneField = (TextView) findViewById(R.id.phoneField);
        TextView carField = (TextView) findViewById(R.id.carModelField);
        TetTempoDate.temp_str_2 = phoneField.getText().toString();
        TetTempoDate.temp_str_3 = carField.getText().toString();
 
    }
 
 
    @Override
    public void onNothingSelected(AdapterView<?> arg0) {
    }
 
    private EditText getEditText() {
        return (EditText) findViewById(R.id.phoneField);
    }
 
    private EditText getCarModelField() {
        return (EditText) findViewById(R.id.carModelField);
    }
 
 
    private Intent gogoclick() {
 
        Intent return_from_JabberdLoginActivity_Intent = new Intent();
        return_from_JabberdLoginActivity_Intent.putExtra(TetGlobalData.SJBP_KEY, pass);
        return_from_JabberdLoginActivity_Intent.putExtra(TetGlobalData.SJBS_KEY, server);
        return_from_JabberdLoginActivity_Intent.putExtra(TetGlobalData.SJBU_KEY, user);
        return_from_JabberdLoginActivity_Intent.putExtra(TetGlobalData.SJCALEE_KEY, disp);
 
        return return_from_JabberdLoginActivity_Intent;
 
    }
 
 
    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.jabberOkButton:
                //TODO implement
                TextView userField = (TextView) findViewById(R.id.jabberUserField);
                TextView passField = (TextView) findViewById(R.id.jabberPasswordField);
                server = serverField;
                user = userField.getText().toString();
                pass = passField.getText().toString();
                disp = dispField;
                if (city == 0) {
                    Toast.makeText(getApplicationContext(), R.string.noTown, Toast.LENGTH_SHORT).show();
                    //onResume();
                } else if (user.length() == 0) {
                    Toast.makeText(getApplicationContext(), R.string.noJabUser, Toast.LENGTH_LONG).show();
                    //onResume();
                } else if (pass.length() == 0) {
                    Toast.makeText(getApplicationContext(), R.string.noJabPasswd, Toast.LENGTH_LONG).show();
                    //onResume();
                } else {
 
                    TetGlobalData.CARRENT_ACTIVITY = TetGlobalData.JAB_LOGIN_ACTIVITY;
                    TetGlobalData.jabLoginAttempts = TetGlobalData.jabLoginAttempts + 1;
                    setResult(RESULT_FIRST_USER, gogoclick());
                    finish();
                }
                break;
            case R.id.buttoniHaveNotLogin:
                //TODO implement
                Intent nR = new Intent(getApplicationContext(), mobi.tet_a_tet.atda.tet_a_tet.FirstRegistration.NotRegisteredYetActivity.class);
                // Oth.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(nR);
                break;
            case R.id.buttonExit:
                //TODO implement
                Intent mA = new Intent(getApplicationContext(), MainActivity.class);
                mA.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                startActivity(mA);
                finish();
                break;
        }
    }
 
    @Override
    public void onDestroy() {
        EventBus.getDefault().unregister(this);
        Log.e(pseudo_tag, "FINISHED");
        super.onDestroy();
    }
 
    @Override
    protected void onResume() {
        super.onResume();
        Log.e(pseudo_tag, "onResume()");
    }
}
Кусок xml
XML
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
31
32
33
            <Spinner
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/spinnerCountry"
                android:entries="@array/country_arrays"
                android:focusable="true"
                android:layout_weight="0.4" />
 
        </TableRow>
 
        <TableRow
            android:id="@+id/tableRow2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:focusable="false"
            android:focusableInTouchMode="false">
 
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textAppearance="?android:attr/textAppearanceSmall"
                android:text="@string/cityIDE"
                android:id="@+id/citytextView"
                android:layout_weight="1" />
 
            <Spinner
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/spinnerCity"
                android:focusable="true"
                android:layout_weight="0.47" />
 
        </TableRow>
Естественно в ресурсах (strings.xml )есть запись:

XML
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
31
32
33
34
35
36
37
    <string name="country">Страна</string>
 
    <string-array name="country_arrays">
        <item>Укажите страну</item> <!-- 0 -->
        <item>Россия</item> <!-- 1 -->
        <item>Украина</item> <!-- 2 -->
        <item>Беларусь</item> <!-- 3 -->
    </string-array>
 
    <string-array name="city_ru_arrays">
        <item>Укажите город</item> <!-- 0 -->
        <item>Ижевск</item> <!-- 1 -->
        <item>Ковров</item> <!-- 2 -->
        <item>Тазовский</item> <!-- 3 -->
        <item>Воткинск</item> <!-- 4 -->
        <item>Шадки</item> <!-- 5 -->
        <item>Череповец</item> <!-- 6 -->
        <item>В. Устюг</item> <!-- 7 -->
    </string-array>
 
    <string-array name="city_ua_arrays">
        <item>Укажите город</item> <!-- 0 -->
        <item>Белая Церковь</item> <!-- 1 -->
        <item>Бердичев</item> <!-- 2 -->
        <item>Казатин</item> <!-- 3 -->
        <item>Кельменцы</item> <!-- 4 -->
        <item>Новомосковск</item> <!-- 5 -->
        <item>Мироновка</item> <!-- 6 -->
        <item>Мукачево</item> <!-- 7 -->
        <item>Рубежное</item> <!-- 8 -->
        <item>Житомир</item> <!-- 9-->
    </string-array>
 
    <string-array name="city_by_arrays">
        <item>Укажите город</item>
        <item>Лепель</item> <!-- 1 -->
    </string-array>
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.11.2016, 11:36
Ответы с готовыми решениями:

Реализовать односвязный список данных вида "Страна, город, количество населения"
Поставлена задача реализовать односвязный список данных вида Страна город количество населения Обеспечить выполнение операций: ...

Форма (Страна, Регион, Город)
Доброго времени суток. Сейчас на сайте стоит форма с 3-мя селектами (&quot;Страна&quot;, &quot;Регион&quot;, &quot;Город&quot;) (изображение №1) ...

Расшифровать ребус (6 * Город = Страна)
Расшифровать ребус, полученный в результате замены одинаковых букв одинаковыми цифрами. Найти также такие значения цифр, при которых сумма...

4
914 / 562 / 88
Регистрация: 13.02.2014
Сообщений: 2,083
01.11.2016, 14:39
Если список статичен, то зачем городить БД? А так просто из списка заполняете данные в БД.

Добавлено через 2 минуты
Или же вопрос в том, что города отосятся к определенной стране? Тогда, да, запросом из БД нужно получать список городов.

Добавлено через 3 минуты
Таблицы:
Страны: id, страна
Города: id, город //где id - id из т.Страны
1
69 / 62 / 13
Регистрация: 10.01.2012
Сообщений: 508
01.11.2016, 18:46  [ТС]
Насчет БД я так и предполагал.
К сожалению/счастью список из статичного вырос до динамичного.
Он тянется с сервера и может меняться в зависимости от добавления/удаления города, изредка это может касаться страны.
Так же много что было статичным ранее и было "для себя", могло вносится ручками, а теперь разрослось и требует динамической загрузки с сервака "для других" и естественно все приходится переписывать.
0
69 / 62 / 13
Регистрация: 10.01.2012
Сообщений: 508
16.11.2016, 14:03  [ТС]
Так как же наполнить спиннер?

Получаю из БД

Java
1
2
3
4
        Country res_country = new Country(this);
        ArrayList<ArrayList<String>> arrayList = res_country.getExecuteResult("select Country_id, Country_"+locale+" from Country");
        arrayList.get(posCountryId);
        Log.d(pseudo_tag, "We get ="+String.valueOf(arrayList));

.
Как из ArrayList<ArrayList<String>> напихать результат в Spenner и получить Country_ID чтоб потом по нему тянуть список городов в стране?

.
Наполняется БД так
Java
1
2
3
4
5
        db.execSQL("CREATE TABLE Country (Country_id INTEGER PRIMARY KEY AUTOINCREMENT, Country_ru STRING (100), Country_en STRING (100), Country_uk STRING (100), Country_by STRING (100));");
        db.execSQL("INSERT INTO Country (Country_id, Country_ru, Country_en, Country_uk, Country_by) VALUES (0, 'Укажите страну', 'Add Country', 'Вкажіть країну', 'Укажыце краіну');");
        db.execSQL("INSERT INTO Country (Country_id, Country_ru, Country_en, Country_uk, Country_by) VALUES (1, 'Беларусь', 'Belsrus', 'Білорусь', 'Беларусь');");
        db.execSQL("INSERT INTO Country (Country_id, Country_ru, Country_en, Country_uk, Country_by) VALUES (2, 'Россия', 'Russia', 'Росія', 'Расія');");
        db.execSQL("INSERT INTO Country (Country_id, Country_ru, Country_en, Country_uk, Country_by) VALUES (3, 'Украина', 'Ukraine', 'Україна', 'Украіна');");

Выхлоп строки Log.d(pseudo_tag, "whot we get ="+String.valueOf(arrayList));

Java
1
D/FirstAppRegistationActivity: whot we get =[[0, Add Country], [1, Belsrus], [2, Russia], [3, Ukraine]]
0
914 / 562 / 88
Регистрация: 13.02.2014
Сообщений: 2,083
23.11.2016, 07:17
Java
1
spinner.setAdapter(arrayList);
Затем в слушателе получить страну и сделать запрос к БД для получения городов страны.
Можно сразу заполнять через курсор:
Java
1
2
3
4
5
6
7
Cursor cursor = SQLData.getCountry();
String[] columns = new String[] { "Country_ru" };
int[] to = new int[] { android.R.id.text1 };
SimpleCursorAdapter mAdapter = new SimpleCursorAdapter(this, android.R.layout.simple_spinner_item, cursor, columns, to);
mAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
Spinner spinner = (Spinner) findViewById(R.id.mySpinner);
spinner.setAdapter(mAdapter);
http://droidtips.ru/zapolnenie... or-loader/
http://developer.alexanderklim... pinner.php
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.11.2016, 07:17
Помогаю со студенческими работами здесь

Ввести в форму (СТРАНА - ГОРОД) РЕГИОН
Здравствуйте! Нигде не смог найти решения подобной задачи. Сам тоже не смог разобраться. Есть форма она прикреплена во вложении. нужно в...

Создать класс“Страна”, состоящей из класса ”Город”
1. Для типа динамических структур данных, разработать соответствующие классы, предусмотрев конструкторы инициализации и копирования,...

Формирование физического адреса (страна/город/улица)
Задание по проектированию адресного справочника. Соответственно есть желание чтобы пользователь не вводил самостоятельно страну,...

Дата конкретного места (Страна, город) через datetime
Приветствую. Каким образом я могу получить через datetime дату конкретной страны/города? Например я хочу ограничить доступ к коду после...

Как сделать связь выпадающих списков страна, город?
Как сделать связь выпадающих списков страна, город? Город сначала не показывается и заполняется автоматически при выборе страны. В MS...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита табличной части. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru