0

スピナーからの値の選択に基づいてメッセージを表示したい。だから私は次のコードを使用しました。

sp=(Spinner)findViewById(R.id.spinner1);
        String ar[]={"hello","abc"};
        ArrayAdapter<String> adapt=new ArrayAdapter<String>(SpinnerEampleActivity.this, android.R.layout.simple_spinner_dropdown_item,ar);
        sp.setAdapter(adapt);
        sp.setOnItemSelectedListener(new OnItemSelectedListener() {

        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1,
                int arg2, long arg3) 
        {
            if(arg2==0)
            {
            AlertDialog.Builder alert=new AlertDialog.Builder(SpinnerEampleActivity.this);
            alert.setMessage("hello");
            alert.show();
            }
            else
            {
                AlertDialog.Builder alert=new AlertDialog.Builder(SpinnerEampleActivity.this);
                alert.setMessage("abc");
                alert.show();
            }

        }

しかし、スピナーから既に選択されている値を選択すると、メッセージが表示されません。問題を解決するのに役立ちますか。前もって感謝します。

4

3 に答える 3

0

現在選択されているアイテムをもう一度クリックすると、イベントが発生しなくなります。setOnItemSelectedListenerそのため、スピナーが応答するのをキャッチすることはできません。

既に選択されているアイテムのクリックを処理するには、カスタム スピナー アダプターを作成する必要があります。

于 2013-01-29T07:48:43.080 に答える
0

カスタムスピナーを取得するために次のことを試しました

ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_dropdown_item, selects)
                    {
                       @Override
                       public View getDropDownView(int position, View convertView, ViewGroup parent)
                       {
                        View v = convertView;
                         if (v == null) 
                           {
                             Context mContext = this.getContext();
                             LayoutInflater vi = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                              v = vi.inflate(R.layout.spinner_item, null);
                           } 
                         final TextView tv=(TextView) v.findViewById(R.id.custopspin);
                         int pos=position;
                         if(pos==0)
                         {
                             tv.setText("hello");
//                           sy
                         }
                         else if(pos==1)
                         {
                             tv.setText("abc");
                         }
                         else
                         {
                             tv.setText("hi");
                         }
                         tv.setTextColor(Color.RED);
                         tv.setClickable(true);
                         tv.setOnClickListener(new OnClickListener() 
                         {

                        @Override
                        public void onClick(View arg0) 
                        {
                            if(tv.getText().toString().equals("hello"))
                            {
                                                                    }
                            else if(tv.getText().toString().equals("hi"))
                            {

                            }
                            else
                            {
                            }
                        }
                     });    
                     return v;  
                    }              
                 };     
        timeslot.setAdapter(spinnerAdapter);

オプションを選択した後の上記のコメントで述べたように、非表示ではありませんでした。

于 2013-01-29T08:14:45.777 に答える