2

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);

}

主な質問は次のとおりです。スピナーの動作を変更するにはどうすればよいですか? アダプターが設定されてデータがロードされたときではなく、クリックされた (タッチされた) ときに onItemSelected イベントが発生する必要があります。

4

1 に答える 1

1

OnItemSelectedadapterが最初に設定されたときに常に呼び出されます。私の知る限り、これを止める方法はありません。できることは、booleanフラグをActivity設定し、最初に実行した後にリスナーで true に設定し、false の場合は内部のコードを実行しないことです。

onFocusChangeListenerを使用すると、 がフォーカスを取得するのをリッスンし、Spinnerフォーカスを取得したときに何かを実行または実行しないようにすることができます。しかし、単純にフラグを使用するのが最も簡単だと思います

于 2013-05-07T15:02:14.150 に答える