Spinner onItemSelected一遍又一遍地调用

时间:2013-05-07 14:57:12

标签: android spinner android-spinner

我是Android编程的新手,我觉得旋转选择器有点迷失...... 我发现了一些与此相关的问题,但没有一个符合我的目的:

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事件,而不是在设置适配器并加载数据时触发。

1 个答案:

答案 0 :(得分:1)

首次设置OnItemSelected时,始终会调用

adapter。 AFAIK,没有办法阻止这种情况发生。您可以做的是在boolean中设置一个Activity标志,并在第一次运行后在侦听器中将其设置为true,并且当它为假时不在内部运行代码。

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