6

相互に排他的な意味で互いに「結び付け」たい 2 つのスピナーがあります。一方のアイテムを選択すると、そのアイテムのテキストが赤くなり、上部に表示されます。最初の (「タイトル」) 選択 (以前に別の項目が選択されていた場合)、そのテキストは白に変わります。

これはすべて onItemSelected リスナーを介して行われます。

    sectionSpin.setOnItemSelectedListener(new OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View arg1,
                int position, long arg3) {              
            issueSpin.setSelection(0);                                      
            ((TextView) issueSpin.getChildAt(0)).setTextColor(Color.parseColor("#FFFFFF"));  
            ((TextView) arg1).setTextColor(Color.parseColor("#E3170D"));
....

「課題スピナー」の場合はその逆です。私の問題は、あるスピナーから別のスピナーに移動し、一番上のアイテムを選択すると、選択されているアイテムが既に選択されているため、onItemSelectedListener が登録されないことです。

これはありえないと言われました。というか、既に選択されている項目に対して onItemSelected リスナーを起動することは不可能だと言われました。これは技術的には正しいことだと私は認識していますが、この問題は比較的単純に思えます。また、目的の効果を得るには回避策が必要であると確信しています。

私が熟考しているものについて、いくつか質問があります。

  1. スピナー内のすべてのアイテムを未選択として設定し、そのうちの 1 つを表示する方法はありますか?
  2. と組み合わせて、おそらく一番上のアイテムで、別のタイプのイベント (つまり、「setOnTouchListener」、「setOnClickListener」など) を利用できonItemSelectedListenerますか?
  3. おそらく、スピナー自体で膨らませたビューで、別のタイプのイベントを単独で利用する必要がありonItemSelectedListenerますか?
  4. 上記の箇条書きでほのめかされたものよりも優れた戦略を見つけるのを手伝ってもらえますか?
4

3 に答える 3

1

を使用する代わりに、アクティブでない に視覚的に似た をSpinner使用します。ボタンをクリックすると、を含むカスタムが表示されます。現在選択されているアイテムを表示するには、のメソッドおよび/または位置を使用できます。は、アイテムが選択されたかどうかに関係なく、何かがクリックされたことを通知されます。ButtonSpinnerDialogListViewsetSelectionAdaptergetViewListViewOnItemClickListener

クリックされた項目を見つけたら、 を非表示にし、これDialogを含むボタンに通知して、必要に応じActivityて両方を更新できるようにしButtonsます。

DialogFragmentsと aを使用して、これと非常によく似たものを実装しましたがDialogFragmentParent、正常に動作します。

于 2013-04-09T11:43:52.910 に答える