Я использую 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();
}
dialogSelectedItems () вызывается первым, когда пользователь выбирает элементы, а processBatch () вызывается при отправке
может обновить полный фрагмент кода?
может обновить полный фрагмент кода? Вы имеете в виду опубликовать весь код фрагмента
да. ты можешь обновить?
обновили код фрагмента
Я думаю, вы используете другой экземпляр, поэтому его пустой список. если вам нужен другой экземпляр, вы можете использовать статическую переменную
да, теперь он работает, делая объекты List <String>, static решил мою проблему, теперь я могу использовать тот же экземпляр




Создание статического 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();
проверьте, какой метод вызывается первым?