Добавлены элементы в Arraylist в методе, но пустые в других методах;

Я использую arrayList, чтобы сохранить выбранный пользователем элемент внутри метода, но когда я пытаюсь использовать сохраненные элементы в других методах, список пуст. как я могу сделать его элементы для использования в другом методе

вот и весь код фрагмента

/**
 * A simple {@link Fragment} subclass.
 */
public class AddBatchFragment extends Fragment implements AdapterView.OnItemSelectedListener,View.OnClickListener,OnDialogSelectedItems{
    private EditText batchCode,batchName;
    private static TextView subjectText;
    private List<String> subjects = new ArrayList<>();
    private Spinner batchCourseSpinner,batchsemesterSpinner;
    private Button createBatchBtn,resetBatchBtn,selectSubjects;
    private Spinner courseSpinner,semesterSpinner,subjectSpinner;
    private IBatchDao iBatchDao;
    private CourseTasks.selectCoursesAsyncTask coursesAsyncTask;
    private SemesterTasks.selectSemestersAsyncTask semestersAsyncTask;
    private List<CourseModel> courseModels;
    private List<SubjectModel> subjectModels = new ArrayList<>();
    private List<SemesterModel> semesterModels;
    private   ArrayAdapter<CourseModel> courseAdapter;
    private  ArrayAdapter<SemesterModel> semesterAdapter;
    private SelectSubjectsDialog subjectsDialog;
    private CourseModel course;
    private SemesterModel semester;
    private long addBatchStatus;

oncreate метод

@Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //dao
       // iSubjectDao = new SubjectDao(getActivity());
        iBatchDao = new BatchDao(getActivity());
        //tasks
        coursesAsyncTask = new CourseTasks.selectCoursesAsyncTask(getActivity() , new CourseDao(getActivity()));
        semestersAsyncTask = new SemesterTasks.selectSemestersAsyncTask(getActivity() , new SemesterDao(getActivity()));
        //retrieving values from tasks
        try {
          //  subjectModels = subjectAsyncTask.execute().get();
            courseModels = coursesAsyncTask.execute().get();
            semesterModels = semestersAsyncTask.execute().get();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }

        //creating spinner adapters
         courseAdapter = new ArrayAdapter<>(getActivity(),android.R.layout.simple_spinner_dropdown_item,courseModels);
        courseAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

       semesterAdapter = new ArrayAdapter<>(getActivity(),android.R.layout.simple_spinner_dropdown_item,semesterModels);
        semesterAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

    }

oncreateView метод

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
   setHasOptionsMenu(true);

     View   view = inflater.inflate(R.layout.fragment_add_batch, container, false);
     //edit texts
        batchCode = view.findViewById(R.id.batch_code);
        batchName = view.findViewById(R.id.batch_name);
        //spinners
        courseSpinner = view.findViewById(R.id.batch_course_spinner);
        courseSpinner.setAdapter(courseAdapter);
        courseSpinner.setOnItemSelectedListener(this);

        semesterSpinner = view.findViewById(R.id.batch_semester_spinner);
        semesterSpinner.setAdapter(semesterAdapter);
        semesterSpinner.setOnItemSelectedListener(this);

        //buttons
        selectSubjects = view.findViewById(R.id.batch_subjects_dropdown);
        selectSubjects.setOnClickListener(this);
        createBatchBtn  = view.findViewById(R.id.create_batch_btn);
        createBatchBtn.setOnClickListener(this);
        resetBatchBtn = view.findViewById(R.id.reset_batch_btn);
        resetBatchBtn.setOnClickListener(this);
            //text view
        subjectText = view.findViewById(R.id.selected_subjects);
        subjectText.setText("no course_unit selected");

        return view;
    }

*onCreateOptionMenu method*


 @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);
        inflater.inflate(R.menu.course_menu , menu);
    }

    //item action

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        return true;
    }

    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        switch (parent.getId()){
            case R.id.batch_course_spinner:
                //select course object
                 course = courseModels.get(position);
               // Toast.makeText(getActivity() , "course item "+course.getName()+" course code "+course.getCode(),Toast.LENGTH_LONG).show();
                break;
            case R.id.batch_semester_spinner:
                  semester = semesterModels.get(position);

                break;
        }
    }

    @Override
    public void onNothingSelected(AdapterView<?> parent) {

    }

    @Override
    public void onClick(View view) {
         switch (view.getId()){
             case R.id.batch_subjects_dropdown:
                 subjectsDialog = new SelectSubjectsDialog();
                 subjectsDialog.show(getActivity().getSupportFragmentManager() , "select subject");
                 break;
             case R.id.create_batch_btn:

Здесь вызывается метод processBatch

                 processBatch();
                 break;

             case R.id.reset_batch_btn:
                     resetFields();
                 break;
         }
    }  

этот метод переопределяется из пользовательского интерфейсаздесь элементы добавляются в Arraylist

@Override public void dialogSelectedItems (элементы списка) { Список список = новый ArrayList <> ();

              for(String s: items) {
                  subjects.add(s);
              }
        Log.d("sub", "dialogSelectedItems: selected subject string size "+subjects.size());


        }



private void resetFields(){
        batchName.setText("");
        batchCode.setText("");
}

processBatch методЯ хочу использовать в этом методе элементы, хранящиеся в аррайлисте

private void processBatch(){
        String batchname = batchName.getText().toString();
        String batchcode = batchCode.getText().toString();
        Toast.makeText(getActivity() , "sujectModels "+subjectModels.size() , Toast.LENGTH_LONG).show();
        Toast.makeText(getActivity() , "subs size "+subjects.size() , Toast.LENGTH_LONG).show();


}

проверьте, какой метод вызывается первым?

Bhuvaneshwaran Vellingiri 11.10.2018 09:52

dialogSelectedItems () вызывается первым, когда пользователь выбирает элементы, а processBatch () вызывается при отправке

Wanfadger 11.10.2018 10:04

может обновить полный фрагмент кода?

Bhuvaneshwaran Vellingiri 11.10.2018 10:08

может обновить полный фрагмент кода? Вы имеете в виду опубликовать весь код фрагмента

Wanfadger 11.10.2018 10:12

да. ты можешь обновить?

Bhuvaneshwaran Vellingiri 11.10.2018 10:15

обновили код фрагмента

Wanfadger 11.10.2018 10:50

Я думаю, вы используете другой экземпляр, поэтому его пустой список. если вам нужен другой экземпляр, вы можете использовать статическую переменную

Ban 11.10.2018 11:06

да, теперь он работает, делая объекты List <String>, static решил мою проблему, теперь я могу использовать тот же экземпляр

Wanfadger 11.10.2018 11:37
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
8
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Создание статического arrayylist при объявлении, повторно решило мою проблему

public class AddBatchFragment extends Fragment implements AdapterView.OnItemSelectedListener,View.OnClickListener,OnDialogSelectedItems{

    private static List<String> subjects = new ArrayList<>();

Это помогает поддерживать один и тот же экземпляр arraylist, который можно использовать в других методах с его элементами. Добавление элементов в список массива

@Override
    public void dialogSelectedItems(List<String> items) {
        List<SubjectModel> list = new ArrayList<>();
        for (String s : items) {
            subjects.add(s);
        }

используя элементы, добавленные в список другим способом

 private void processBatch(){
        Toast.makeText(getActivity() , "subs size "+subjects.size()+" item at 2 "+subjects.get(2) , Toast.LENGTH_LONG).show();

Другие вопросы по теме