2013-07-12 106 views
1

我有一个微调控制setOnItemSelectedListener在我的应用程序,当我选择一个项目的微调,事件onItemSelected将被启动。 现在我希望点击一个按钮来启动onItemSelected事件,我该怎么办?谢谢! onItemSelected为您的微调如何单击按钮启动微调控件的ItemSelected事件?

spinnerFolder.setOnItemSelectedListener(new OnItemSelectedListener() { 
      @Override 
      public void onItemSelected(AdapterView<?> arg0, View arg1,int arg2, long arg3) { 
       //Do Business Logic 
      }   
      @Override 
      public void onNothingSelected(AdapterView<?> arg0) { 
      } 
     }); 
+0

你怎么知道哪个项目从微调目标?它会是当前选定的项目吗? – gunar

+0

这是当前选定的项目 – HelloCW

回答

1

只需拨打您的按钮侦听以下几点:

spinnerFolder.getOnItemSelectedListener().onItemSelected(spinnerFolder, spinnerFolder.getSelectedView(), spinnerFolder.getSelectedItemPosition(), spinnderFolder.getSelectedItemId()); 

这就是全部:-)

+0

这不是一个“干净的代码!” :P – gunar

+0

嗯,这是触发请求事件的最短途径。 ;)这是这里的实际问题!如果从体系结构的角度来看另一个对象的事件触发一个对象的事件是合理的,那当然就是另一个讨论了。 – a11n

0

的第三个参数(INT ARG2)是位置,这样你就可以通过

String selection = (String) mSpinnerAdapter.getItem(position); 

获得当前的选择或使用mSpinner.getItemAtPosition(position)如果你没有自定义适配器。

将当前选择存储在某处并在onClickListener中为您的按钮选取它。

0

当您需要用一些数据的微调,你将有一些排序列表对象(字符串,自定义对象,等等)在SpinnerAdapter,你会保持对它的引用该列表,我们称之为:private List<Object> dataList = ...

首先,我将创建一个能够处理特定的数据对象的方法: 保护无效doBusinessLogic(对象MyObj中){// 做,让你快乐 的事情}

然后从听众称这个为:

spinnerFolder.setOnItemSelectedListener(new OnItemSelectedListener() { 
      @Override 
      public void onItemSelected(AdapterView<?> arg0, View arg1,int arg2, long arg3) { 
       // args2 is the position from backed data list 
       doBusinessLogic(dataList.get(args2)); 
      }   
      @Override 
      public void onNothingSelected(AdapterView<?> arg0) { 
      } 
     }); 

然后从按钮收听你会再次调用上面的方法,但对象的索引,你会得到来自spinnerFolder.getSelectedItemPosition();

myButton.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       int dataIndex = spinnerFolder.getSelectedItemPosition(); 
       doBusinessLogic(dataList.get(index)); 
      } 
     });