【问题标题】:How to send data by click back button?如何通过单击返回按钮发送数据?
【发布时间】:2020-02-04 07:24:16
【问题描述】:

我正在使用两个活动,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);
            }
        }
    }
}

子活动

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 堆栈中移除时,有什么方法可以发送文本数据?

【问题讨论】:

标签: android android-intent onbackpressed


【解决方案1】:
  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);  
    }

【讨论】:

    【解决方案2】:

    如果您希望从开始的活动中获得回报,则需要使用startActivityForResult()

    之后,您还需要在启动活动上实现onActivityResult() 方法才能真正读取返回的数据。

    【讨论】:

      【解决方案3】:

      使用 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();
          }
      }
      

      【讨论】:

        【解决方案4】:

        您可以使用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

        【讨论】:

          猜你喜欢
          • 2014-03-01
          • 2019-09-09
          • 1970-01-01
          • 1970-01-01
          • 2021-08-19
          • 2019-02-04
          • 1970-01-01
          • 2022-11-04
          • 2017-10-31
          相关资源
          最近更新 更多