2013-05-07 75 views
2

以及即时通讯新的Android中的编程,我觉得有点与微调选择失去... 我发现与相同,但他们都不适合我的目的,一些问题:微调onItemSelected保持所谓的一遍又一遍的

objectSpinner = (Spinner) findViewById(R.id.objectSpinner); 
objectSpinner.setOnItemSelectedListener(MainActivity.this); 


@Override 
public void onItemSelected(AdapterView<?> adapterView, View view, 
     int position, long position2) { 

    Object object = adapterView.getAdapter().getItem(position); 
    Log.d("Spinner", "itemSelected: " + position + " - Object: " + object); 

    menuLayout = new View(this); 

    if (object instanceof Filter) { 
     Filter mFilter = (Filter) object; 
     setAdapterFilter(mFilter); 

    } 

} 

继承人我把所有的数据设置到微调器的方法(微调器的数据它最初加载在onCreate方法,但它可以根据用户从微调器选择的项目而改变,所以onItemSelected将其调用一遍又一遍再次...)

public void setAdapterFilter(Filter filter) { 
    frameLayout.removeAllViews(); 
    if (filter != null) { 
     menuLayout = inflater.inflate(R.layout.filter, null); 
     TextView typeTxt = (TextView) menuLayout 
       .findViewById(R.id.type_txt); 
     typeTxt.setText(filter.getType()); 

     frameLayout.addView(menuLayout, 0); 
    } 

    ArrayAdapter<Filter> filterAdapter = new ArrayAdapter<Filter>(this, 
      android.R.layout.simple_spinner_item, filterArrayList); 
    objectSpinner.setAdapter(filterAdapter); 

} 

主要问题是:如何改变Spinner的行为?我只需要onItemSelected事件触发点击(触摸)时,而不是当适配器设置和数据加载时触发。

+0

你在哪里设置了微调器适配器? – TronicZomB 2013-05-07 14:58:25

+0

在onCreate方法的开始处,我使用了setAdapterFilter方法,并将null作为参数 – 2013-05-07 15:15:31

回答

1

OnItemSelected总是在第一次设置adapter时调用。 AFAIK,没有办法阻止这种情况的发生。你可以做的就是在你的Activity中设置一个boolean标志,并且在你的监听器第一次运行之后将它设置为true,并且当它是假的时候不要运行里面的代码。

使用onFocusChangeListener可以让您倾听Spinner以获得焦点,并在焦点时做或不做某事。但我仍然认为简单地使用一个标志将是最简单的

+0

在Spinner聚焦时是否有另一种方法捕获事件?或者至少点击而不是选择? – 2013-05-07 15:14:01

+0

是的,我编辑过。我不认为'Spinner'有''onClick()'下拉菜单 – codeMagic 2013-05-07 15:18:40

+0

非常感谢你解决了这个问题......有些人告诉我和你一样,用最简单的方式使用标志,但我想解决它一些其他的方式只是为了学习。 – 2013-05-07 15:27:52

相关问题