Android 调用同一活动的多个实例和多个活动

Android 调用同一活动的多个实例和多个活动,android,android-intent,android-activity,Android,Android Intent,Android Activity,我有三项活动。主活动、活动B和活动C。在活动A和B中,在两个活动中都有两个按钮“源”和“目标”。在活动C中有一个数据列表。当从活动A和B中单击按钮(源或目标)时。这两个活动都调用活动C 活动A的代码如下所示 public class MainActivity extends Activity { TextView source,destination; Button sendSource,sendDestination,btnTob; String src,des,activity,check

我有三项活动。主活动、活动B和活动C。在活动A和B中,在两个活动中都有两个按钮“源”和“目标”。在活动C中有一个数据列表。当从活动A和B中单击按钮(源或目标)时。这两个活动都调用活动C 活动A的代码如下所示

public class MainActivity extends Activity {

TextView source,destination;
Button sendSource,sendDestination,btnTob;
String src,des,activity,checksrc,checkdes;

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

    source=(TextView)findViewById(R.id.tv_rcvDataA);
    destination=(TextView)findViewById(R.id.tv_rcvDataAa);
    sendSource=(Button)findViewById(R.id.btn_sendA);
    sendDestination=(Button)findViewById(R.id.btn_sendAa);
    btnTob=(Button)findViewById(R.id.btn_toB);

    sendSource.setText("source");
    sendDestination.setText("destination");
    src=sendSource.getText().toString();
    des=sendDestination.getText().toString();

    activity=getClass().getSimpleName();
    sendSource.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent send= new Intent(MainActivity.this,ActivityC.class);
            send.putExtra("source",src);
            send.putExtra("Activity",activity);
            startActivity(send);
        }
    });
    sendDestination.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent senda= new Intent(MainActivity.this,ActivityC.class);
            senda.putExtra("destination",des);
            senda.putExtra("Activity",activity);
            startActivity(senda);

        }
    });

    btnTob.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent movetoB= new Intent(MainActivity.this,ActivityB.class);
            startActivity(movetoB);
            finish();
        }
    });   }}
活动B的代码是

public class ActivityB extends Activity {

TextView sourceB,destinationB;
Button sendSourceB,sendDestinationB;

String src,des,activity,checksrc,checkdes;

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

    sourceB=(TextView)findViewById(R.id.tv_rcvDataB);
    destinationB=(TextView)findViewById(R.id.tv_rcvDataBa);
    sendSourceB=(Button)findViewById(R.id.btn_sendB);
    sendDestinationB=(Button)findViewById(R.id.btn_sendDataBa);
    activity=getClass().getSimpleName();

    sendDestinationB.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent senda= new Intent(ActivityB.this,ActivityC.class);
            senda.putExtra("destination",src);
            senda.putExtra("Activity",activity);
            startActivity(senda);
        }
    });

    sendSourceB.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent send= new Intent(ActivityB.this,ActivityC.class);
            send.putExtra("source",src);
            send.putExtra("Activity",activity);
            startActivity(send);
        }
    });}}

现在,如何在activityC中检查哪个activity正在调用此activity,哪个ButtonCListener正在
onCreate
中调用intent

,或者在activity-C中调用该方法后的任何时间,您应该执行以下操作:

Intent intent = getIntent();
if (intent  != null) {
    String activity = intent.getStringExtra("Activity");
    String src = intent.getStringExtra("source");
    // Do something with those values
}

onCreate
中或在Activity-C中调用该方法后的任何时候,您都应该执行以下操作:

Intent intent = getIntent();
if (intent  != null) {
    String activity = intent.getStringExtra("Activity");
    String src = intent.getStringExtra("source");
    // Do something with those values
}

您需要通过
Intent.putExtra()
发送用于确定什么值和什么活动的值。请记住,您需要将键设置为
Intent.putExtra()
的第一个参数,如

intent.putExtra(THIS_IS_THE_KEY, THIS_IS_YOUR_VALUE);
您需要创建如下内容:

// This is the key for your putExtra
// you need to create this as global variable.
public static final String FROM_KEY = "FROM";
public static final String ACTIVITY_KEY = "ACTIVITY";
public static final boolean IS_FROM_SOURCE = true;

// This is a sample to send data to Activity C
// where the activity caller is B and from source
Intent senda= new Intent(ActivityB.this,ActivityC.class);
senda.putExtra(FROM_KEY, IS_FROM_SOURCE);
senda.putExtra(ACTIVITY_KEY,"activity_a");
Bundle extras = getIntent().getExtras();
boolean from = extras.getBoolean(FROM_KEY);
String act = extras.getString(ACTIVITY_KEY);

// do something here if from activity a
if(act.equals("activity_a")) {
  if(IS_FROM_SOURCE) {
    // do something if from source
  } else {
    // do something if from destination.
  }
} else { // if from activity a
  if(IS_FROM_SOURCE) {
    // do something if from source
  } else {
    // do something if from destination.
  }
}
然后在活动C中,您需要接收额外的意图。 您可以在Activity
onCreate()
中获取该值,如下所示:

// This is the key for your putExtra
// you need to create this as global variable.
public static final String FROM_KEY = "FROM";
public static final String ACTIVITY_KEY = "ACTIVITY";
public static final boolean IS_FROM_SOURCE = true;

// This is a sample to send data to Activity C
// where the activity caller is B and from source
Intent senda= new Intent(ActivityB.this,ActivityC.class);
senda.putExtra(FROM_KEY, IS_FROM_SOURCE);
senda.putExtra(ACTIVITY_KEY,"activity_a");
Bundle extras = getIntent().getExtras();
boolean from = extras.getBoolean(FROM_KEY);
String act = extras.getString(ACTIVITY_KEY);

// do something here if from activity a
if(act.equals("activity_a")) {
  if(IS_FROM_SOURCE) {
    // do something if from source
  } else {
    // do something if from destination.
  }
} else { // if from activity a
  if(IS_FROM_SOURCE) {
    // do something if from source
  } else {
    // do something if from destination.
  }
}

您需要通过
Intent.putExtra()
发送用于确定什么值和什么活动的值。请记住,您需要将键设置为
Intent.putExtra()
的第一个参数,如

intent.putExtra(THIS_IS_THE_KEY, THIS_IS_YOUR_VALUE);
您需要创建如下内容:

// This is the key for your putExtra
// you need to create this as global variable.
public static final String FROM_KEY = "FROM";
public static final String ACTIVITY_KEY = "ACTIVITY";
public static final boolean IS_FROM_SOURCE = true;

// This is a sample to send data to Activity C
// where the activity caller is B and from source
Intent senda= new Intent(ActivityB.this,ActivityC.class);
senda.putExtra(FROM_KEY, IS_FROM_SOURCE);
senda.putExtra(ACTIVITY_KEY,"activity_a");
Bundle extras = getIntent().getExtras();
boolean from = extras.getBoolean(FROM_KEY);
String act = extras.getString(ACTIVITY_KEY);

// do something here if from activity a
if(act.equals("activity_a")) {
  if(IS_FROM_SOURCE) {
    // do something if from source
  } else {
    // do something if from destination.
  }
} else { // if from activity a
  if(IS_FROM_SOURCE) {
    // do something if from source
  } else {
    // do something if from destination.
  }
}
然后在活动C中,您需要接收额外的意图。 您可以在Activity
onCreate()
中获取该值,如下所示:

// This is the key for your putExtra
// you need to create this as global variable.
public static final String FROM_KEY = "FROM";
public static final String ACTIVITY_KEY = "ACTIVITY";
public static final boolean IS_FROM_SOURCE = true;

// This is a sample to send data to Activity C
// where the activity caller is B and from source
Intent senda= new Intent(ActivityB.this,ActivityC.class);
senda.putExtra(FROM_KEY, IS_FROM_SOURCE);
senda.putExtra(ACTIVITY_KEY,"activity_a");
Bundle extras = getIntent().getExtras();
boolean from = extras.getBoolean(FROM_KEY);
String act = extras.getString(ACTIVITY_KEY);

// do something here if from activity a
if(act.equals("activity_a")) {
  if(IS_FROM_SOURCE) {
    // do something if from source
  } else {
    // do something if from destination.
  }
} else { // if from activity a
  if(IS_FROM_SOURCE) {
    // do something if from source
  } else {
    // do something if from destination.
  }
}

非常感谢你。这真的帮了我很大的忙。这是一个很好的解释(不客气)。如果这是您的正确答案,请将其设置为已接受答案。非常感谢。这真的帮了我很大的忙。这是一个很好的解释(不客气)。如果这是您的正确答案,请将其设置为接受答案。我这样做了,但如果我直接转到活动C而不是从活动A或活动B开始,则会导致崩溃。我通过在putExtras中发送布尔值来解决此问题,并在活动C上检查,如果布尔值为真,则startActivityforResult启动的活动。。。否则它是由startActivity@jchunchari启动的,但如果我直接转到活动C而不是从活动A或活动B启动,它会崩溃。我通过在putExtras中发送布尔值解决了这个问题,在活动C上,我检查了如果布尔值为真,则startActivityforResult启动的活动是由intent启动的。。。否则它是由startActivity@jchunchar启动的