0

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

自定义视图:

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

     // ...

     MyDialogFragment.setColorPickerListener(this);
   }


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

对话片段

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 到对话框片段的静态方法。

是否有任何替代解决方案,例如获取活动、实例或强制转换?

4

1 回答 1

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);
    }
}
于 2013-09-25T07:51:22.217 回答