主要活动
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()。 我真的很感激任何帮助。感谢。
答案 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();
}