完成活动后如何通过意向发送价值

我有一个活动,显示项目的网格视图。 当我点击其中任何一个,我移动到另一个活动显示该项目的信息。 我也有select返回(gridview活动)或删除它。

如果我删除它,我需要刷新gridview,所以我需要发送一个variables,说:“eey,我删除了一个项目,你需要刷新”。

我想我需要用startActivityForResult打开第二个活动,但我不知道该如何设置值。

选项1(后退箭头):完成活动。 没有结果回来。 选项2(删除项目):完成活动并返回结果。

提前致谢!

Solutions Collecting From Web of "完成活动后如何通过意向发送价值"

您可以设置您的自定义结果。 像DELETE_ITEM一样。

在你的删除button做这样的事情:

 public static int DELETE_ITEM = 1234; Intent intent = new Intent(); intent.putExtra("ITEM_ID", YOUR ITEM ID); setResult(DELETE_ITEM , intent); 

现在在你的活动结果做这样的事情:

 @Override protected void onActivityResult(int requestCode, int resultCode, Intent intent) { if (resultCode == DELETE_ITEM) { // CODE TO DELETE ITEM super.onActivityResult(requestCode, resultCode, intent); } } 

希望这可以帮助

头等舱

 Intent i = new Intent(this, Second.class); startActivityForResult(i, 1); protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 1) { if (resultCode == RESULT_OK) { String result = data.getStringExtra("result"); //your code } if (resultCode == RESULT_CANCELED) { // Write your code if there's no result } } } 

第二类

 Intent returnIntent = new Intent(); returnIntent.putExtra("result", "your message"); setResult(RESULT_OK, returnIntent); finish(); 

是的,你必须使用startActivityForResult 。 在显示该项目信息的活动完成之前,您必须致电

 setResult(resultCode, data); finish(); 

在GridView的Activity中将会被调用

 protected void onActivityResult(int arg0, int resultCode, Intent data) 

我们可以开始新的活动。通过意图发送价值使用此..

Intent main = new Intent(MainActivity.this,SecondActivity.class); main.putExtra(“JobId”,jobid); startActivityForResult(audio,requestCode);

像这样在SecondActivity中接收值

int jobid = getIntent()。getExtras()。getInt(“jobId”);

假设我希望从活动A到活动B,并将值传递给B,最后完成A.

按照这个:

A:某处

 Intent goToActivityBIntent = new Intent(A.this, B.class); goToActivityBIntent.putExtra("com.example.myapp.data", data); startActivity(goToActivityBIntent); finish(); // close A 

接收B中的数据:

 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_b); // receive the data Bundle extras = getIntent().getExtras(); if (extras != null) { data = extras.getString("com.example.myapp.data"); } // Some stuff } 

没有必要完成活动

 //reload the adapter and use grid.invalidateViews(); Method adapter = new AppAdapter(MyApp.this, MyApp.this, data, show_collection ); grid.invalidateViews(); grid.setAdapter(adapter); 

GridView有一个invalidateViews()方法。

当你调用这个方法时:“所有的视图都要重build和重绘”。

你只需要删除图像调用setResult与适当的结果代码,也许数据。

我认为最正确的方法来实现这是从图像查看活动自定义用户结果返回。 如果在图像查看器活动中写入类似内容,则可以实现。

 public static final int RESULT_IMAGE_DELETED = RESULT_FIRST_USER; public static final int RESULT_EXTRA_IMAGE_ID = "extra.imageid"; void onImageDeleted(int imageId) { Bundle resultData = new Bundle(); resultData.putInt(RESULT_EXTRA_IMAGE_ID, imageId); setResult(RESULT_IMAGE_DELETED); finish(); } 

您可能需要在您的onCreate方法中设置默认结果

 @Override public void onCreate(Bundle savedInstanceState) { // init stuff setResult(RESULT_OK); } 

在您的网格活动中,您必须检查图像查看器活动的结果代码,如果它不正确 – 请检查您的网格是否更改了数据。

 public static final int REQUEST_VIEW_IMAGE = 1; void startImageViewing(int imageId) { Intent intent = new Intent(Intent.ACTION_VIEW); intent.putExtra(ImageViewActivity.EXTRA_IMAGE_ID); startActivityForResult(intent, REQUEST_VIEW_IMAGE); } @Override public void onActivityResult(int requestCode, int resultCode, Bundle data) { if (requestCode == REQUEST_VIEW_IMAGE) { if (resultCode != RESULT_OK) { updateImageGridView(); } } } 

那么,我已经这样做了:

通过startActivityForResultAcivityA启动ActivityB

 Intent intent = new Intent(AcivityA.this, ActivityB.class); startActivityForResult(intent, 19); 

ActivityB中使用setResultAcivityA发送数据:

 @Override public void finish() { Intent intent = new Intent(); intent.putExtra("flag",true); setResult(RESULT_OK, intent); super.finish(); } 

ActivityA中 接收ActivityB发送的onActivityResult数据

 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == 19) { if(resultCode == RESULT_OK) { boolean flagResult = data.getBooleanExtra("flag"); Log.i("Result", ""+flagResult); } } } 

希望这会帮助你。