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

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

Восстановить пароль Регистрация
 
zoleg
13 / 13 / 1
Регистрация: 10.01.2012
Сообщений: 103
01.11.2016, 11:36     Двухуровневый список выбора (Spinner) "Страна->Город" c применением SQLite #1
Подскажите пожалуйста в каком виде создавать данные в БД и как правильно переработать файлы чтоб выводить список стран и городов черпая данные из 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>
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.11.2016, 11:36     Двухуровневый список выбора (Spinner) "Страна->Город" c применением SQLite
Посмотрите здесь:

Сохранение текста из Spinner а в базу SQLite Android
"Синхронизация" баз SQLite двух устройств Android
Создать "древовидный" список Android
Android SQLite, отношение "один ко многим"
Android Список из Spinner
Изменить голубой цвет "список закончился" Android
Android Сделать "барабан выбора" как на айфоне
SQLite, ошибка: не существует поля "почта" в базе данных Android

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Rube
907 / 555 / 87
Регистрация: 13.02.2014
Сообщений: 2,050
01.11.2016, 14:39     Двухуровневый список выбора (Spinner) "Страна->Город" c применением SQLite #2
Если список статичен, то зачем городить БД? А так просто из списка заполняете данные в БД.

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

Добавлено через 3 минуты
Таблицы:
Страны: id, страна
Города: id, город //где id - id из т.Страны
zoleg
13 / 13 / 1
Регистрация: 10.01.2012
Сообщений: 103
01.11.2016, 18:46  [ТС]     Двухуровневый список выбора (Spinner) "Страна->Город" c применением SQLite #3
Насчет БД я так и предполагал.
К сожалению/счастью список из статичного вырос до динамичного.
Он тянется с сервера и может меняться в зависимости от добавления/удаления города, изредка это может касаться страны.
Так же много что было статичным ранее и было "для себя", могло вносится ручками, а теперь разрослось и требует динамической загрузки с сервака "для других" и естественно все приходится переписывать.
zoleg
13 / 13 / 1
Регистрация: 10.01.2012
Сообщений: 103
16.11.2016, 14:03  [ТС]     Двухуровневый список выбора (Spinner) "Страна->Город" c применением SQLite #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]]
Rube
907 / 555 / 87
Регистрация: 13.02.2014
Сообщений: 2,050
23.11.2016, 07:17     Двухуровневый список выбора (Spinner) "Страна->Город" c применением SQLite #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/...ws/spinner.php
Yandex
Объявления
23.11.2016, 07:17     Двухуровневый список выбора (Spinner) "Страна->Город" c применением SQLite
Ответ Создать тему
Опции темы

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