java - 访问 fragment 中声明的微调器

标签 java android android-activity android-fragments

我有一个微调器,我用资源中的数组列表填充它。我已填充它并且代码编译正确。我现在的问题是,我似乎无法弄清楚如何从我的主类访问微调器。例如,我有我的类“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("");
    }
}

下面是我的 fragment 的代码,我在其中初始化并填充微调器

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”访问我的微调器,因为它已从 fragment 填充。我希望能够采用某人选择的选项并将其与方法“createExercise”中的练习名称一起输入数据库。

最佳答案

有很多方法可以做到这一点。

通常,您想要响应 fragment 中某种类型的事件。例如,按下按钮。从 fragment 中,您可以像这样调用 Activity :

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

例如,更好的方法是让 Activity 实现 IOptionSelectedListener 接口(interface)。该接口(interface)可以有一个名为 OnOptionSelected(value) 的方法。那么你可以这样做:

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

您还可以将 Activity 引用传递给 fragment 的 newInstance() 方法,而不是调用 getActivity()。

Activity 还可以引用 fragment 并调用 fragment 上的方法来获取微调器的实际值。

关于java - 访问 fragment 中声明的微调器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24543328/

相关文章:

android - 旋转时从错误的资源文件夹中提取的可绘制对象

java - 多个线程与管道流通信并使用 PushbackInputStream

java - 根据条件将 RxJava Observer 添加到链中

Java连续输入代码

android - 使用 Amazon SNS 服务发送推送通知

android - 如果由启动器声明,如何覆盖输入 Activity 动画

Java并发主题: publication of objects or its internal state

java - 如何获取当前的顶级 Activity 上下文

android制作自定义布局形状

android - java.lang.InstantiationException : can't instantiate class?