10

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

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

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

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

提前致谢!

4

8 回答 8

15

您可以设置自定义结果。喜欢DELETE_ITEM

在您的删除按钮上执行以下操作:

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);
  }
} 
于 2013-07-11T09:51:39.553 回答
13

希望这可以帮助

头等舱

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();
于 2013-07-11T09:46:27.103 回答
5

是的,你必须使用startActivityForResult. 在显示项目信息的活动上调用完成之前,您必须调用

setResult(resultCode, data);
finish();

在 GridView 的 Activity 中会被调用

protected void onActivityResult(int arg0, int resultCode, Intent data)
于 2013-07-11T09:46:19.150 回答
0

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

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

像这样接收 SecondActivity 中的值..

int jobid = getIntent().getExtras().getInt("jobId");

于 2013-07-11T09:51:15.483 回答
0

假设我希望从活动 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

    }
于 2013-07-11T09:51:44.377 回答
0

您只需要在使用适当的结果代码和可能的数据删除图像调用 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();
        }
    }
}
于 2013-07-11T09:47:49.643 回答
0

无需完成活动

//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() 方法。

当您调用此方法时:“所有要重建和重绘的视图”。

于 2013-07-11T09:52:32.103 回答
0

好吧,我已经这样做了:

通过startActivityForResultActivityA启动ActivityB

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

ActivityB中用于setResult向 ActivityA 发送数据

@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);
        }
    }
}

希望这会帮助你。

于 2016-09-14T06:27:04.227 回答