Счетчик доступа, объявленный во фрагменте

#java #android #android-activity #android-fragments

#java #Android #android-активность #android-фрагменты

Вопрос:

У меня есть счетчик, который я заполняю списком массива из ресурса. Я его заполнил, и код компилируется правильно. Моя проблема сейчас в том, что я, похоже, не могу понять, как получить доступ к счетчику из моего основного класса. Например, у меня есть мой класс «CreateExerciseActivity», где у меня есть мой метод «createExercise»

 public class CreateExerciseActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragment_create_exercise_activiy);

        if (savedInstanceState == null) {
            getSupportFragmentManager().beginTransaction()
                    .add(R.id.container, new PlaceholderFragment()).commit();
        }
    }

    public void createExercise(View view){

        EditText name = (EditText) findViewById(R.id.editText1);
        DataBaseWrapper dbHandler = new DataBaseWrapper(this);

        Exercise exercise = new Exercise(name.getText().toString(), category);
        dbHandler.addExercise(exercise); 
        name.setText("");
    }
}
  

И ниже приведен код для моего фрагмента, где я инициализирую и заполняю счетчик

 public static class PlaceholderFragment extends Fragment {

    public PlaceholderFragment() {
    }

    private Spinner spinner;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater
                .inflate(R.layout.fragment_create_exercise_activiy,
                        container, false);
        loadSpinnerCategories(rootView);
        return rootView;
    }

    private void loadSpinnerCategories(View view){
        spinner = (Spinner) view.findViewById(R.id.category_spinner);
        ArrayAdapter<CharSequence> adapter =    ArrayAdapter.createFromResource(getActivity().getBaseContext(), R.array.categories,
                android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);
    }
}
  

Я хочу знать, как я могу получить доступ к моему счетчику из первого класса «CreateExerciseActivity» теперь, когда он был заполнен из фрагмента. Я хочу иметь возможность выбрать выбранный кем-то вариант и ввести его в базу данных вместе с названием упражнения в методе «createExercise».

Комментарии:

1. Вы используете макет (xml) как для activity, так и для фрагмента одинаково fragment_create_exercise_activiy.xml затем заполните счетчик в activity или добавьте функцию click внутри fragment.

Ответ №1:

Есть много способов сделать это.

Обычно требуется реагировать на некоторый тип события во фрагменте. Например, нажата кнопка. Из фрагмента вы можете вызвать действие следующим образом:

 CreateExerciseActivity activity = (CreateExerciseActivity) getActivity();
activity.createExercise(....);
  

Лучшим способом для activity было бы реализовать интерфейс IOptionSelectedListener, например. Интерфейс мог бы иметь метод с именем OnOptionSelected(значение). Тогда вы могли бы сделать:

 IOptionSelectedListener listener = (IOptionSelectedListener) getActivity();
listener.OnOptionSelected(....);
  

Вы также могли бы передать ссылку на activity методу newInstance() фрагмента вместо вызова getActivity().

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