2017-08-21 9 views
-3

RadioGroupは、OnCheckedChangeListenerでは "set()"メソッドを提供しますが、 "get()"では提供しません。しかし、私のモジュールは、何らかの方法でRadioGroupのOnCheckedChangeListenerを取得し、それを顧客の動作の追跡を提供するリスナーでラップする必要があります。このOnCheckedChangeListenerリスナを、ライブラリのユーザにパラメータとして明示的に提供することを要求せずに、どのようにして取得できますか?問題のRadioGroupでOnCheckedChangeListenerを取得する方法

サンプル:

我々が実装することができます方法:

void wrapMyRadioGroup(RadioGroup group,OnCheckedChangeListener listener){ 
    group.setOnCheckedChangeListener(new SomeCompositeListener(listener)); 
} 

しかし、このようないくつかのことができません:あなたはguesできるよう

void wrapMyRadioGroup(RadioGroup group){ 
    group.setOnCheckedChangeListener(new SomeCompositeListener(group.getOnCheckedChangeListener())); 
} 

そして、我々は最後のものを必要とします。

P.S.

私は反射を伴う解決策を見つけました。

private void trackRadioGroup(RadioGroup radioGroup){ 
    RadioGroup.OnCheckedChangeListener listener = null; 
    try { 
     Field field = radioGroup.getClass().getDeclaredField("mOnCheckedChangeListener"); 
     field.setAccessible(true); 
     Object value = field.get(radioGroup); 
     if(value !=null){ 
      listener = (RadioGroup.OnCheckedChangeListener)value; 
     } 
    } catch (NoSuchFieldException e) { 
     e.printStackTrace(); 
    } catch (IllegalAccessException e) { 
     e.printStackTrace(); 
    } 
    radioGroup.setOnCheckedChangeListener(new SomeCompositeListener(listener)); 
} 

すべての理解や料金をありがとう...

+0

を試してみてください、あなたはラジオボタンがRADIOGROUPからチェックを受けるお探しですか? –

+0

あなたのコードを投稿してください。 –

+0

私は、RadioGroupの既存のリスナーをキャプチャし、ライブラリのコードでラップし、再び元に戻すアプローチを探しています。 – Arderun

答えて

1

この

RadioGroup radioGroup = (RadioGroup)findViewById(R.id.cancle_booking_radio_group); 

radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { 

     @Override 
     public void onCheckedChanged(RadioGroup group, int checkedId) { 

      View radioButton = radioGroup.findViewById(checkedId); 
      int index = radioGroup.indexOfChild(radioButton); 
      switch (index) { 
       case 0: 
        // perform your action here 
        break; 
       case 1: 
        // perform your action here 
        break; 
       case 2: 
        // perform your action here 
        break; 
       case 3: 
        // perform your action here 
        break; 
       case 4: 
        // perform your action here 
        break; 
      } 
     } 
    }); 
+0

番号。前にあったキャプチャリスナーが必要で、あなたのコードでこのリスナーがまったく削除されました – Arderun

関連する問題