#android #sqlite #spinner
#Android #sqlite #счетчик
Вопрос:
В моем приложении есть два счетчика, которые заполняют список из sqlite, и он работает нормально. Когда я выбираю состояние в первом счетчике, заполнение второго списка счетчиков зависит от первого счетчика. Теперь я хочу, чтобы, когда я выбираю элемент в обоих счетчиках, а затем нажимаю назад и снова запускаю действие, список второго счетчика все еще существует. Я хочу очистить список второго счетчика при нажатии кнопки «Назад» и заполнить список во втором счетчике, когда пользователь выбирает значение в первом счетчике.
public void fillStateData() {
try {
ArrayList<String> state_array = new ArrayList<String>();
state_array.add("Select State");
Cursor cursor_State = db.rawQuery("SELECT nSerialNo as _id,cCodeName FROM CodeMaster where nCtgId = 6", null);
if (cursor_State.moveToFirst()) {
do {
//assing values
String stateID = cursor_State.getString(0);
String stateName = cursor_State.getString(1);
stateData = stateName;
state_array.add(stateData);
} while (cursor_State.moveToNext());
}
ArrayAdapter my_Adapter = new ArrayAdapter(getActivity(), android.R.layout.simple_list_item_1, state_array);
spnState.setAdapter(my_Adapter);
cursor_State.close();
spnState.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
state = spnState.getSelectedItem().toString();
Cursor cursor = db.rawQuery("SELECT nSerialNo FROM CodeMaster where cCodeName = '" state "'", null);
if (cursor.moveToFirst()) {
stateCodeId = cursor.getString(0);
}
cursor.close();
fillDistrictData(stateCodeId);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
public void fillDistrictData(String stateCodeId) {
try {
district_array = new ArrayList<String>();
district_array.clear();
district_array.add("Select District");
Cursor cursor_District = db.rawQuery("SELECT nSerialNo as _id,cCodeName FROM CodeMaster where nParentSerialNo = '" stateCodeId "'", null);
if (cursor_District.moveToFirst()) {
do {
//assing values
String districtID = cursor_District.getString(0);
String districtName = cursor_District.getString(1);
districtData = districtName;
district_array.add(districtData);
} while (cursor_District.moveToNext());
}
district_Adapter = new ArrayAdapter(getActivity(), android.R.layout.simple_list_item_1, district_array);
spnDistrict.setAdapter(district_Adapter);
cursor_District.close();
spnDistrict.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
district = spnDistrict.getSelectedItem().toString();
Cursor cursor = db.rawQuery("SELECT nSerialNo FROM CodeMaster where cCodeName = '" district "'", null);
if (cursor.moveToFirst()) {
do {
//assing values
districtCodeId = cursor.getString(0);
} while (cursor.moveToNext());
}
cursor.close();
fillTalukaData(districtCodeId);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
Комментарии:
1. каким методом вы настраиваете свой счетчик?
2. Я вызываю fillStateData() в методе onCreateView, и когда пользователь выбирает состояние выбора, то зависит от выбранного состояния, в котором я заполняю район.
3. попробуйте переместить его в onResume() вашего фрагмента.
4. Я пытался, но это не работает. На самом деле, что происходит, когда я нажимаю кнопку «Назад» и перехожу к своему основному действию, а затем снова перехожу к этому действию, где у меня есть два фрагмента, и я помещаю эти вращатели в первый фрагмент, тогда список второго вращателя все еще существует. Я хочу сделать счетчик пустым, когда пользователь снова запустит действие.
Ответ №1:
добавьте этот метод в действие.Надеюсь, это сработает.
@Override
public void onBackPressed() {
spnDistrict.getAdapter().clear();
spnDistrict.getAdapter().notifyDataSetChanged();
finish();
}
Комментарии:
1. Спасибо, Дхармишта, но он не работает во фрагменте.
Ответ №2:
Попробуйте использовать
adapter.clear();
spinner.setAdapter(new ArrayAdapter<String>(YourActivity.this,android.R.layout.simple_dropdown_item_1line,adapter));
Ответ №3:
Используйте Onresume для очистки нужного списка массивов
@Override
public void onResume() {
Log.e("DEBUG", "onResume of LoginFragment");
state_array.clear();
district_array.clear();
super.onResume();
}
или в режиме onCreate После ввода массива очистите оба ArrayList.