美文网首页
Activity间传递数据

Activity间传递数据

作者: 爱做梦的严重精神病患者 | 来源:发表于2018-12-03 22:49 被阅读0次

1.正向传递数据

 当我们通过startActivity(Intent)启动Activity的时候,可以利用传入的Intent参数附带一些数据传递到新的Activity中去。

public class MainActivity extends AppCompatActivity {
          int postParameters = 1;

   @Override
    protected void onCreate(Bundle savedInstanceState){ 
         利用SecondActivity的静态方法,启动SecondActivity并传递数据
              Intent intent = SecondActivity.newIntent(MainActivity.this, postParameters);
              startActivity(intent);
    }
}

public class SecondActivity extends AppCompatActivity {

private final static String POST_PARAMETERS = "post_parameters";

利用静态方法构建Intent,是一种良好的编码风格,同时有很好的封装性。
public static Intent newIntent(Context packageContext, int postParameters) { 
        Intent intent = new Intent(packageContext, SecondActivity.class);
        intent.putExtra(POST_PARAMETERS, postParameters);
        return intent;
      }


 @Override
    protected void onCreate(Bundle savedInstanceState) {
            获取传递的数据
      int postParameters = getIntent().getIntExtra(POST_PARAMETERS, 0);      
      }

}

利用静态方法构建Intent将数据的键值Intent都封装在子Activity中,不向外界泄露。这是一种良好的编码风格,有很好的封装性


2.获取返回数据

 当需要从子Activity获取返回信息时,可以调用startActivityForResult(Intent intent, int requestCode)启动子Activity。第一个参数是intent,第二个参数是请求码。在一个Activity启动多个不同类型的子Activity,且需要判断返回消息是来自哪个子Activity时,就会用到请求码

 在子Activity中调用setResult(int resultCode, Intent data)向父Activity返回信息。一般来说resultCode有两种情况:Activity.RESULT_OK和Activity.RESULT_CANCELED。若有信息数据需要回传给父Activity,则需要创建一个空Intent并附加上数据

最后,需要在父Activity中调用onActivityResult(int requestCode, int resultCode, Intent data)处理返回数据根据requestCoderesultCode判断是由哪个子Activity所返回的数据利用返回的data获取数据

public class MainActivity extends AppCompatActivity {

   private final static int REQUEST_CODE_SECOND = 0;

   @Override
    protected void onCreate(Bundle savedInstanceState){ 
      int postParametets = 1;
      Intent intent = SecondActivity.newIntent(MainActivity.this, postParameters);
      startActivityForResult(intent, REQUEST_CODE_SECOND);
    }


    @Override
      protected void onActivityResult(int requestCode, int resultCode, Intent data) {
      switch(requestCode) {
         case: REQUEST_CODE_SECOND
              if(resultCode == Activity.RESULT_OK){ 
      //  利用静态方法获取数据,不暴露键值,封装性好
                int returnParameters = SecondActivity.getReturnParameters(data);
            }
            break;
         
         default:
            break;
          }
      }
}

public class SecondActivity extends AppCompatActivity {

private final static String POST_PARAMETERS = "post_parameters";
private final static String RETURN_PARAMETERS = "return_parameters";


public static Intent newIntent(Context packageContext, int postParameters) { 
        Intent intent = new Intent(packageContext, SecondActivity.class);
        intent.putExtra(POST_PARAMETERS, postParameters);
        return intent;
      }

 public static int getReturnParameters(Intent data) {
            return data.getIntExtra(RETYRN_PARAMETERS, 0);     
      }

 @Override
    protected void onCreate(Bundle savedInstanceState) {
            //获取传递的数据
      int postParameters = getIntent().getIntExtra(POST_PARAMETERS, 0); 
            //设置返回数据
     setReturnParameters(postParameters);
      }


      private Intent setReturnParameters(int postParameters) {
            int returnParameters = postParameters + 1;
            Intent intent = new Intent();
            intent.putExtra(RETURN_PARAMETERS, returnParameters);
            setResult(Activity.RESULT_OK,  intent);     
      }
}

上述代码多次使用SecondActivity的静态方法(包括获取数据的的时候),目的是保持良好的封装性不向外暴露存储数据的键值,以及Intent的相关信息。这种编码风格需要多加练习。

相关文章

网友评论

      本文标题:Activity间传递数据

      本文链接:https://www.haomeiwen.com/subject/jbfucqtx.html