如何在我的主类中使用Fragment的Spinner事件?

时间:2016-06-17 10:49:31

标签: java android spinner onitemclicklistener

以下名为Presenteter的代码是我的主要类,我将根据问题替换Fragment

public class Presenteter extends AppCompatActivity   {
    private final Questions question1Fragment = new Questions();
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.present);

FragmentTransaction ft=getSupportFragmentManager().beginTransaction();
        ft.setCustomAnimations(android.R.anim.fade_in,android.R.anim.fade_out);

         ft.replace(R.id.flPersonalization, question1Fragment);

        ft.commit();
}

这是我的Questions课程。它从REST服务器获得问题。所有问题都列在一个Spinner中。我没有在这里写它们,以免混淆你。

public class Questions extends Fragment implements AdapterView.OnItemSelectedListener {
    SearchableSpinner spinner;

    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.question, container, false);
  LinearLayout ln=(LinearLayout)view.findViewById(R.id.listLayout);
          spinner=(SearchableSpinner)view.findViewById(R.id.spinner1);
}

最后,我想在Spinner课程中使用onItemSelected()的{​​{1}}个事件。

我该怎么做? 提前谢谢。

2 个答案:

答案 0 :(得分:2)

您可以在Fragment中执行以下操作:

Presenteter p = (Presenteter) getActivity();

// ...

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        p.yourMethod(); // call a method of your Presenteter class
    }

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

    }
});

答案 1 :(得分:1)

我很高兴您的问题得到了解答,但有更好的方法可以做到这一点。

如果您熟悉Rx的东西,这是一种方法。

如果Rx不是你的一杯茶,你可以使用EventBus,它简化了这种沟通。 链接: EventBus

如果你不确定,我会建议你选择后者。