Как сбросить список счетчиков при возобновлении фрагмента?

#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.