如何通过单击后退按钮发送数据?

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