【问题标题】:How to call a function at every selection in spinner如何在微调器中的每个选择处调用函数
【发布时间】:2016-03-18 19:51:19
【问题描述】:

我正在开发一个 android 应用程序,其中有一个类 AA 类有一个微调器,有一个 B 类有微调器的 onItemSelected()B implements OnItemSelectedListenerB 是公共的。 我想在A A时调用函数。因此,如果选择了first 项目,并将其更改为second,那么我想从A 类中调用一个函数。
我总是想调用相同的A 函数。它会刷新列表。
我该怎么做?
有类A 的微调器调用AonCreate

 public void addListenerOnSpinnerItemSelection() {
    pspinner = (Spinner) findViewById(R.id.spinner1);
    pspinner.setOnItemSelectedListener(new B());
}

还有B类:

public class B implements OnItemSelectedListener {
    public void onItemSelected(AdapterView<?> parent, View view, int pos, long id){
        Toast.makeText(parent.getContext(),
            "The selected place: " + parent.getItemAtPosition(pos).toString(),
            Toast.LENGTH_SHORT).show();
            A.refresh(); //I think I should call A's function like that but 
                         // Android Studio tells meg that refresh() must be static
    }
}

我应该在addListenerOnSpinnerItemSelection() 中调用A 的函数吗?还是在BonItemSelected 中?但是怎么做呢?
不幸的是,上面不是这样工作的。我如何在不使refresh()静态的情况下调用A的函数? 微调器从 xml 中获取其元素。

【问题讨论】:

    标签: android spinner onitemselectedlistener


    【解决方案1】:

    如果索引数量较少,您可以使用它

    public void onClick(View v) {
            startActivity(new Intent(UserLogin.this, ResetEmail.class));
        }
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
        {
            if (parent.getSelectedItemPosition() == 0) 
            {
                someFunction();
            } 
            else if (parent.getSelectedItemPosition() == 1) 
            {
                someFunction();
            } 
            else if (parent.getSelectedItemPosition() == 2)
            {
                someFunction();
            }
        }
    

    祝你好运。

    【讨论】:

      【解决方案2】:

      您可以使用 if/else 语句或在 onItemSelectedListener 中切换。 在你的 onItemSelectedListener 中,试试这个:

      String s = parent.getSelectedItem().toString();
      
      if(s == "1"){
          callFunctionHere();
      }
      else if(s == "2"){
          anotherFunction();
      }
      

      灵感来自this SO question

      【讨论】:

      • 哦,对不起@Steve,也许我忘了提到我总是想在每次选定的更改时调用相同的函数。但是如何在 B 中调用 A 的函数呢? :O a.function() ?
      • 是的,你只需调用 a.function();在每个位置
      • 这不是compare Strings in Java的正确方式
      • @SteveC。这正是downvotes的用途(显示完全错误的东西)。如果您觉得它与那个重复,那么它应该被标记为这样。另一个答案是比较ints 而不是Strings。如果它有帮助,我在发表评论后等待了一段时间,然后才给你一个编辑的机会,但你没有。
      • 很遗憾,我无法调用BA.refresh(),它说refresh() 必须是静态的。但是在refresh() 中还有另一个函数调用AsyncTask,它不能是静态的,但没有它我不能调用它!我不明白onItemSelected() 为什么需要refresh() 静态?
      猜你喜欢
      • 1970-01-01
      • 2013-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多