С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
zoleg
19 / 19 / 1
Регистрация: 10.01.2012
Сообщений: 214
#1

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

01.11.2016, 11:36. Просмотров 448. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.11.2016, 11:36
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Двухуровневый список выбора (Spinner) "Страна->Город" c применением SQLite (Программирование Android):

SQLite, ошибка: не существует поля "почта" в базе данных - Программирование Android
Создал самую простую программку для понимания баз данных SQLite. Есть два поля: имя и почта. 3 кнопки: добавить в базу данных, считать с...

"Attempt to re-open an already-closed object" при работе с SQLite - Программирование Android
Добрый день. Разрабатываю приложение и столкнулся с проблемой... Лог выдаёт вот такое: FATAL EXCEPTION: main ...

"Синхронизация" баз SQLite двух устройств - Программирование Android
Добрый вечер, у меня такой вопрос к знатокам: возможно ли реализовать &quot;синхронизацию&quot; между двумя устройствами, имеющих отличные друг от...

SQLite, отношение "один ко многим" - Программирование Android
Добрый день! Имеется такая задача: Создаю в SQLite две таблицы - &quot;Кинотеатры&quot;, &quot;Фильмы&quot;. У фильма есть параметр - в каких...

Сохранение текста из Spinner а в базу SQLite - Программирование Android
Уважаемые гуру, прошу помощи. Имеется несколько данные (массив) в Spinner е и кнопка. При нажатии кнопки данные из Spinnera должны...

Сделать "барабан выбора" как на айфоне - Программирование Android
Тема конечно баянная))) но все же. Клиент хочет именно БА-РА-БАН выбора количества пассажиров. Да не какой нибудь а именно такой, с...

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

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

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

Получаю из БД

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
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,071
23.11.2016, 07:17 #5
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-spinn...cursor-loader/
http://developer.alexanderklimov.ru/android/views/spinner.php
0
23.11.2016, 07:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.11.2016, 07:17
Привет! Вот еще темы с ответами:

Работа с БД, связывание таблиц "фильмы", "жанры", "режиссеры" - Программирование Android
Ребят, всем привет! накидайте какие-нить идеи по реализации ситуация такая есть таблицы - &quot;списки_жанров&quot;, &quot;фильмы&quot;, &quot;режиссеры&quot; мне...

Ошибка "Unknown method "e" of "org.apache.commons.logging.Log" - Программирование Android
Unknown method 'e' of 'org.apache.commons.logging.Log' package com.mycompany.myapp; import android.widget.*; import...

Изменить голубой цвет "список закончился" - Программирование Android
Не знаю у кого как, но у меня при листании за пределы списка появляется голубая &quot;туманная полоска&quot; с той стороны где она закончилась...

Создать "древовидный" список - Программирование Android
Накидайте пожалуйста ссылок на примеры. И вообще в какую сторону копать? Дерево должно быть как сворачивающимся, так и фиксированым. ...


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

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

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