活动监听器实现?

时间:2015-07-17 22:48:14

标签: android

我是Android / Java新手,我有一个基于以下场景的问题:

  1. 我有 BaseActivity ,这是通过其他活动的数量来扩展的,例如 A1,A2, A3
  2. 活动 A1 A2 可能会要求用户输入部分#s。活动 A3 没有此功能,因为它永远不会要求部件#。
  3. 用户在 PartDialogFragment 中输入了部件号。由于可能会提示用户从 A1 A2 活动中获取部件号,因此我想将实例化的代码放在< PartDialogFragment 中。 strong> BaseActivity 所以我不必在活动 A1 A2 中复制相同的电话。
  4. PartDialogFragment 具有定义 onPartEntered()
  5. 的界面

    问题:我是否应该在 BaseActivity A1 A2 活动中实施 PartDialogFragment 界面?

    基本上,我正在考虑做这样的事情:

    class PartDialogFragment extends DialogFragment{
        private PartListener mPartListener;
    
        public interface PartNumberListener{
            void onPartEntered(String part#);
        }
        ...
        ...
    
      @Override
      public void onAttach(Activity activity){
        super.onAttach(activity);
        try{
          mPartListener = (PartListener) activity;
        } catch(ClassCastException e){
          throw new ClassCastException(activity.toString() + " must implement PartListener");
        }
      }
      ...
      ...
    }
    
    public abstract class BaseActivity 
      implements PartDialogFragment.PartNumberListener {  //**should I implement it here?**
    
        ...
        ...
    
        public void ShowPartNumberDialog(){
            //creates and shows PartDialogFragment defined above
        }
    }
    
    public class A1 extends Activity
      implements PartDialogFragment.PartNumberListener {  //**or in A1 and A2?**
        ...
        ...
        if (something){
            ShowPartNumberDialog();  //this is defined in BaseActivity
        }
    }
    
    public class A1 extends Activity
      implements PartDialogFragment.PartNumberListener {  //**or in A1 and A2?**
        ...
        ...
        if (something){
            ShowPartNumberDialog();  //this is defined in BaseActivity
        }
    }
    
    public class A3 extends Activity{
        ...
        ...
        //**this will never ask for Part#, so no need to implement PartDialogFragment.PartNumberListener here.**
    }
    

2 个答案:

答案 0 :(得分:1)

您可以拥有abstract PartActivity来实现onPartEntered逻辑。 A1A2将对PartActivity进行扩展,A3会直接扩展BaseActivity,因此不会有此逻辑。

答案 1 :(得分:1)

A1和A2活动需要实现接口,因为如果基类是抽象的,那么根据定义,您需要创建它的子类来实例化。子类(由编译器)将需要实现抽象类遗漏的任何接口方法。