Android与侦听器通信自定义View和DialogFragment

时间:2013-09-25 07:32:16

标签: android interface communication android-dialogfragment

我正在尝试使用接口/回调在自定义View和DialogFragment之间创建通信。

自定义视图:

public MyDraw extends View implements ColorPickerListener
{
   public MyDraw(Context context)
   {
      super(context);

     // ...

     MyDialogFragment.setColorPickerListener(this);
   }


   @Override
   public void onColorChanged(int color)
   {
      // ...
   }
}

DialogFragment

public MyDialogFragment extends DialogFragment
{
   public interface ColorPickerListener
   {
      public void onColorChanged(int color);
   }

   ColorPickerListener colorPickerListener;    

   public static void setColorPickerListener(ColorPickerListener listener)
   {
      colorPickerListener = listener;
   }

   // ....       

   private void colorSelected(int color)
   {
      colorPickerListener.onColorChanged(color);
   }
}

这是有效的,但我不确定这是否正常。我害怕内存泄漏,因为我正在引用从View到对话框片段的静态方法。

是否有其他替代解决方案,例如将活动,实例或转换为某些内容?

1 个答案:

答案 0 :(得分:1)

您无需调用静态setColorPickerListener方法。您可以使用DialogFragment方法找到findFragmentByTag个实例,然后只需调用setColorPickerListener(非静态方法)。

public void showPickerDialog() {
   DialogFragment newFragment = new PickerFragment();

    newFragment.show(this.getSupportFragmentManager(), "dialogfrag1");
    getSupportFragmentManager().executePendingTransactions();

      // getting the fragment 
   PickerFragment df1 = (PickerFragment) getSupportFragmentManager().findFragmentByTag("dialogfrag1");
    if (df1 != null)    {
   df1.registerListener(this);
    }
}