如何通过单击后退按钮发送数据?
How to send data by click back button?
我正在使用两个活动,MainActivity 和 SubActivity。
MainActivity.class
public class MainActivity extends AppCompatActivity {
Button button;
@Override
protected void onCreate() {
...
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent sub = new Intent(this, SubActivity.class);
sub.putExtra("name", "a");
startActivity(sub);
}
}
}
}
SubActivity
public class SubActivity extends AppCompatActivity {
EditText text;
@Override
protected void onCreate() {
...
text.setText(getIntent().getStringExtra("name"));
}
@Override
public void onBackPressed() {
super.onBackPressed();
}
}
在这种情况下,如果我在 SubActivity 中更改 EditText
中的文本,我想在 SubActivity 中按下后退按钮时将更改的文本数据发送到 MainActivity(这意味着 SubActivity onDestroy()
)。我不想在 SubActivity 中像这样制作第二个 MainActivity。
@Override
public void onBackPressed() {
Intent intent = new Intent (this, MainActivity.class);
intent.putExtra("name", text.getText().toString());
startActivity(intent);
}
当 SubActivity 从 activity 堆栈中移除时,有什么方法可以发送文本数据吗?
如果您希望从一开始就有一个 return,则需要使用 startActivityForResult()
activity。
之后,您还需要在 activity 开始实施 onActivityResult()
方法才能真正读取 returned 数据。
使用 startActivityForResult 而不是 startActivity
主要活动:
public class MainActivity extends AppCompatActivity {
Button button;
String name= "a";
@Override
protected void onCreate() {
...
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent sub = new Intent(this, SubActivity.class);
sub.putExtra("name", name);
startActivityForResult(sub,100);
}
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == Activity.RESULT_OK) {
if (requestCode == 100) {
String name = data.getStringExtra("name);
text.setText(name);
}
}
}
}
子活动:
public class SubActivity extends AppCompatActivity {
EditText text;
@Override
protected void onCreate() {
...
text.setText(getIntent().getStringExtra("name"));
}
@Override
public void onBackPressed() {
Intent resultIntent = new Intent();
resultIntent.putExtra("name", "your_editext_value");
setResult(Activity.RESULT_OK, resultIntent);
finish();
}
}
public class MainActivity extends AppCompatActivity {
Button button;
@Override
protected void onCreate() {
...
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent sub = new Intent(this, SubActivity.class);
sub.putExtra("name", "a");
startActivityForResult(sub , 2);
}
}
}
@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)
{
String message=data.getStringExtra("name");
textView1.setText(message);
}
}
}
和
@Override
public void onBackPressed() {
Intent intent = new Intent (this, MainActivity.class);
intent.putExtra("name", text.getText().toString());
setResult(2,intent);
}
您可以使用 SharedPreference
来存储值并更新它或在任何地方使用它而不是使用 Intent
喜欢 MainActivity
public class MainActivity extends AppCompatActivity {
Button button;
@Override
protected void onCreate() {
...
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Editor edit=sp.edit();
edit.putString("name","a");
edit.commit();
Intent sub = new Intent(this, SubActivity.class);
startActivity(sub);
}
}
} }
并在 SubActivity
public class SubActivity extends AppCompatActivity {
EditText text;
@Override
protected void onCreate() {
...
text.setText(sp.getString("name",""));
text.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// TODO Auto-generated method stub
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
Editor edit=sp.edit();
edit.putString("name",s.toString);
edit.commit();
} });
}
@Override
public void onBackPressed() {
super.onBackPressed();
}}
使用来自 SharedPreference
的值
sp.getString("name","");
要使用 SharedPreference
看这个 https://developer.android.com/training/data-storage/shared-preferences#java
我正在使用两个活动,MainActivity 和 SubActivity。
MainActivity.class
public class MainActivity extends AppCompatActivity {
Button button;
@Override
protected void onCreate() {
...
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent sub = new Intent(this, SubActivity.class);
sub.putExtra("name", "a");
startActivity(sub);
}
}
}
}
SubActivity
public class SubActivity extends AppCompatActivity {
EditText text;
@Override
protected void onCreate() {
...
text.setText(getIntent().getStringExtra("name"));
}
@Override
public void onBackPressed() {
super.onBackPressed();
}
}
在这种情况下,如果我在 SubActivity 中更改 EditText
中的文本,我想在 SubActivity 中按下后退按钮时将更改的文本数据发送到 MainActivity(这意味着 SubActivity onDestroy()
)。我不想在 SubActivity 中像这样制作第二个 MainActivity。
@Override
public void onBackPressed() {
Intent intent = new Intent (this, MainActivity.class);
intent.putExtra("name", text.getText().toString());
startActivity(intent);
}
当 SubActivity 从 activity 堆栈中移除时,有什么方法可以发送文本数据吗?
如果您希望从一开始就有一个 return,则需要使用 startActivityForResult()
activity。
之后,您还需要在 activity 开始实施 onActivityResult()
方法才能真正读取 returned 数据。
使用 startActivityForResult 而不是 startActivity
主要活动:
public class MainActivity extends AppCompatActivity {
Button button;
String name= "a";
@Override
protected void onCreate() {
...
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent sub = new Intent(this, SubActivity.class);
sub.putExtra("name", name);
startActivityForResult(sub,100);
}
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == Activity.RESULT_OK) {
if (requestCode == 100) {
String name = data.getStringExtra("name);
text.setText(name);
}
}
}
}
子活动:
public class SubActivity extends AppCompatActivity {
EditText text;
@Override
protected void onCreate() {
...
text.setText(getIntent().getStringExtra("name"));
}
@Override
public void onBackPressed() {
Intent resultIntent = new Intent();
resultIntent.putExtra("name", "your_editext_value");
setResult(Activity.RESULT_OK, resultIntent);
finish();
}
}
public class MainActivity extends AppCompatActivity {
Button button;
@Override
protected void onCreate() {
...
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent sub = new Intent(this, SubActivity.class);
sub.putExtra("name", "a");
startActivityForResult(sub , 2);
}
}
}
@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)
{
String message=data.getStringExtra("name");
textView1.setText(message);
}
}
}
和
@Override
public void onBackPressed() {
Intent intent = new Intent (this, MainActivity.class);
intent.putExtra("name", text.getText().toString());
setResult(2,intent);
}
您可以使用 SharedPreference
来存储值并更新它或在任何地方使用它而不是使用 Intent
喜欢 MainActivity
public class MainActivity extends AppCompatActivity {
Button button;
@Override
protected void onCreate() {
...
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Editor edit=sp.edit();
edit.putString("name","a");
edit.commit();
Intent sub = new Intent(this, SubActivity.class);
startActivity(sub);
}
}
} }
并在 SubActivity
public class SubActivity extends AppCompatActivity {
EditText text;
@Override
protected void onCreate() {
...
text.setText(sp.getString("name",""));
text.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// TODO Auto-generated method stub
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
Editor edit=sp.edit();
edit.putString("name",s.toString);
edit.commit();
} });
}
@Override
public void onBackPressed() {
super.onBackPressed();
}}
使用来自 SharedPreference
sp.getString("name","");
要使用 SharedPreference
看这个 https://developer.android.com/training/data-storage/shared-preferences#java