如何从Activity调用另一个Activity中的方法

问题描述 投票:0回答:7

我正在开发一个Android应用程序,其中我有

我有两个班级,A班和B班。

在 A 类中,我尝试了如下代码片段,

如何从 Activity 调用另一个 Activity 中的方法?

public class FirstActivity extends Activity {  

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main2);
    }      

    public void method() {
        // some code
    }  
}

public class SecondActivity extends Activity {  

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
         setContentView(R.layout.main2);
    
        FirstActivity fact = new FIrstActivity();
    
        fact.method();
    }
}
android android-activity
7个回答
19
投票

startActivityForResult 模式更适合您想要实现的目标:http://developer.android.com/reference/android/app/Activity.html#StartingActivities

尝试下面的代码

public class MainActivity extends Activity {  

    Button button1;  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
        textView1=(TextView)findViewById(R.id.textView1);  
        button1=(Button)findViewById(R.id.button1);  
        button1.setOnClickListener(new OnClickListener() {  
            @Override  
            public void onClick(View arg0) {  
                Intent intent=new Intent(MainActivity.this,SecondActivity.class);  
                startActivityForResult(intent, 2);// Activity is started with requestCode 2  
            }  
        });  
    }  
 // Call Back method  to get the Message form other Activity  
    @Override  
       protected void onActivityResult(int requestCode, int resultCode, Intent data)  
       {  
                 super.onActivityResult(requestCode, resultCode, data);  
                  // check if the request code is same as what is passed  here it is 2  
                   if(requestCode==2)  
                         {  
                          //do the things u wanted 
                         }  
     }  

} 

第二个活动.class

public class SecondActivity extends Activity {  

    Button button1;  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_second);  

            button1=(Button)findViewById(R.id.button1);  
            button1.setOnClickListener(new OnClickListener() {  
                @Override  
                public void onClick(View arg0) {  
                    String message="hello ";  
                    Intent intent=new Intent();  
                    intent.putExtra("MESSAGE",message);  
                    setResult(2,intent);  
                    finish();//finishing activity  
                }  
            });  
    }  

}  

如果有帮助请告诉我...


13
投票

您不应该创建活动类的实例。这是错误的。 Activity 有 ui 和生命周期,并且 Activity 由

startActivity(intent)

启动

您可以使用

startActivityForResult
或者您可以使用意图将值从一个活动传递到另一个活动并执行所需的操作。但这取决于您打算在该方法中做什么。


6
投票

如果您需要从两个 Activity 调用相同的方法,为什么不使用第三个对象?

public class FirstActivity extends Activity 
{  

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main2);

    }      

    // Utility.method() used somewhere in FirstActivity
}

public class Utility {

    public static void method()
    {

    }  

}

public class SecondActivity extends Activity 
{  

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main2);

        Utility.method();

    }
}

当然,使其静态取决于用例。


0
投票

我的成功:

Activity1:
public static ArrayList<String> listName;
public static void DeleteOneOfList(int position){
    listName.remove(position);
}

Activity2:
private Activity1 activity1;
activity1.DeleteOneOfList(position)

-1
投票
public class ActivityB extends AppCompatActivity {

static Context mContext;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_b);

    try {

        Bundle bundle = getIntent().getExtras();
        if (bundle != null) {
            String texto = bundle.getString("message");
            if (texto != null) {
              //code....
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static void launch(String message) {
        Intent intent = new Intent(mContext, ActivityB.class);
        intent.putExtra("message", message);
        mContext.startActivity(intent);
    }
}

在 ActivityA 或 Service 中。

public class Service extends Service{

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {    

        String text = "Value to send";
        ActivityB.launch(text);
        Log.d(TAG, text);
    }
}

-1
投票

简单,使用静态。

在活动中你有你想要调用的方法:

private static String name = "Robert";

...

public static String getData() {
    return name;
}

在您拨打电话的活动中:

private static String name;

...

name = SplashActivity.getData();

-3
投票

在 FirstActivity 中声明 SecondActivity 变量

像这样

public class FirstActivity extends Activity {  

SecondActivity secactivity;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main2);
  }      

  public void method() {
    // some code

  secactivity.call_method();// 'Method' is Name of the any one method in SecondActivity

  }  
}  

使用这种格式,您可以从一个活动调用另一个活动的任何方法。

© www.soinside.com 2019 - 2024. All rights reserved.