développe une application Android dans laquelle j'ai
J'ai deux classes, classe A et classe B.
En classe A, j'ai essayé les extraits de code comme ci-dessous,
comment appeler une méthode dans une autre activité à partir d'activité.
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();
}
}
Vous ne devez pas créer d'instance de la classe d'activité. Il est faux. L'activité a ui et le cycle de vie et l'activité est démarrée par startActivity(intent)
Vous pouvez utiliser startActivityForResult
ou vous pouvez transmettre les valeurs d'une activité à une autre à l'aide d'intentions et effectuer les tâches requises. Mais cela dépend de ce que vous avez l'intention de faire dans la méthode.
Le modèle startActivityForResult est bien mieux adapté à vos objectifs: http://developer.Android.com/reference/Android/app/Activity.html#StartingActivities
Essayez ci-dessous le code
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
}
}
}
SecondActivity.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
}
});
}
}
Faites-moi savoir si cela a aidé ...
Si vous devez appeler la même méthode depuis les deux activités, pourquoi ne pas utiliser un troisième objet?
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();
}
}
Bien sûr, le rendre statique dépend du cas d'utilisation.
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);
}
}
Dans ActivityA ou 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);
}
}