从另一个类调用Activity类中的公共方法?

时间:2011-10-20 13:10:16

标签: android class

主要活动

    public class MyActivity() extends Activity
    {
        onCreate()
        {
            MyClass myobj=new MyClass();    
        }
        public void Mymethod()
        {}
    }
//HELPER CLASS IN A SEPARATE FILE    
    public class MyClass()
    {
        MyClass(Context context)
        {

        }
    }

我试图从MyClass的一个实例调用Mymethod()。 我真的很感激任何帮助。感谢。

8 个答案:

答案 0 :(得分:24)

为什么不直接将活动传递给构造函数,如

public class MyActivity extends Activity { 

   onCreate(){ 
        MyClass myobj=new MyClass(MyActivity.this);     
   } 

   public void myMethod(){

   } 
} 

//HELPER CLASS IN A SEPARATE FILE     
public class MyClass{ 
    public MyClass(MyActivity act) { 
        act.myMethod();
    } 
} 

答案 1 :(得分:10)

将该方法设为静态,这样您就可以在不创建类对象的情况下调用

public static void Mymethod()
{}

并以这种方式打电话

MainActivity.Mymethod();

答案 2 :(得分:8)

这可能是最好的方法。这就是我的做法。它被称为单身设计模式:

public class MyActivity extends Activity {
    private static MainActivity instance;

    public static MainActivity getInstance() {
     if(instance==null){
          setInstance(this);
        }
        return instance;
    }

    public static void setInstance(MainActivity instance) {
        MainActivity.instance = instance;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setInstance(this);
    }
}

答案 3 :(得分:3)

如果我正确理解你,我相信你可以使用界面作为回调来解决你的问题。

//// ACTIVITY /////////////////////////////////

 public class MyActivity() extends Activity {

    onCreate()
    {
        MyClass myObj=new MyClass();   

        //Set the listener on the object. Created as anonymous
        myObj.setListener(new MyClass.Listener() {
             myMethod();
        });
    }
}

public void myMethod(){

}

////// Custom Class //////////////////

public class MyClass {
     Listener mListener;

     public interface Listener {
          public void onInterestingEvent();
     }

     public void setListener(Listener listener) {
          mListener = listener;
     }

     public void someUsefulThingTheClassDoes() {
          //Do your code here and when you're ready to call the activity's method do this
          mListener.onInterestingEvent();
     }
}

答案 4 :(得分:2)

我有一个内部课程,我想进入一个更通用的库“Helper”课程。我遇到了同样的问题。我通过使用单个抽象方法使辅助类抽象来解决它。然后在我的项目包中,我使用特定类中的构造函数调用扩展了辅助类。

public class MyActivity extends Activity {
    onCreate() {
        MyHelperClass = new MyHelperClass(this, "foobar");
    }

    public void myMethod() {
        // Code...
    }
}

// In a different file
public class MyHelperClass extends HelperClass {
    private MyActivity mInstance;

    public MyHelperClass(MyActivity act, String data) {
        super();
        this.mInstance = act;
        this.mActivity = act;  // Useful for calling generic Activity methods in the HelperClass
        this.mData = data;
    }

    protected void callMyActivityMethod() {
        mInstance.myMethod();
    }
}

// In a different file
public abstract class HelperClass {
    protected Activity  mActivity;
    protected String    mData;

    public HelperClass() {
        // Subclass will set variables
    }

    protected abstract void callMyActivityMethod();

    // More code for all the other stuff the class does
}

通过这种方式,我有一个包含绝大多数“工作”的辅助类,我所要做的就是使用构造函数和一个方法创建一个子类,以便访问调用活动的方法兴趣。

答案 5 :(得分:2)

您必须将MainActivity的实例传递到另一个类,然后您可以从任何地方调用所有公共(在MainActivity中)。

<强> MainActivity.java

public class MainActivity extends AppCompatActivity {

    // Instance of AnotherClass for future use
    private AnotherClass anotherClass;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // Create new instance of AnotherClass and
        // pass instance of MainActivity by "this"
        anotherClass = new AnotherClass(this);
    }

    // Method you want to call from another class
    public void myMethod(){
        ...
    }
}

<强> AnotherClass.java

public class AnotherClass {

    // Main class instance
    private MainActivity mainActivity;  

    // Constructor
    public AnotherClass(MainActivity activity) {

        // Save instance of main class for future use
        mainActivity = activity;  

        // Call method in MainActivity
        mainActivity.myMethod();
    }
}

答案 6 :(得分:0)

在MainActivity.class文件中 您必须从MainActivity类传递MainActivity上下文。然后在MyClass中,您必须获取MainActivity上下文。记住Context和MyActivity是两个不同的参考。

public class MyActivity extends Activity
{
    onCreate(){
        MyClass myobj=new MyClass(MyActivity context);    
    }
    public void Mymethod(){}
}

//单独文件中的帮助类

public class MyClass()
{
    MyActivity context;
    MyClass(MyActivity context)
    {
      this.context = context;

      this.context.Mymethod();
      //Or you can directly use activity context
      context.Mymethod();
    }
}

答案 7 :(得分:-11)

我决定将HelperClass MyClass编写为MyActivity类的内部类。这允许它完全访问父类,但不好的是现在MyClass仅限于MyActivity类。

public class MyActivity() extends Activity
{
    onCreate()
    { 
        MyClass myobj=new MyClass();

    } 

    public void myMethod()
    {

    } 
} 
//INNER CLASS
    public class MyClass
    { 
        public MyClass() 
        { 

        } 
        //I can directly access the MyMethod
        myMethod();
    }