2013-07-11 8 views
7

私はアイテムのグリッドビューを示すアクティビティを持っています。いずれかをクリックすると、そのアイテムの情報を示す別のアクティビティに移動します。私はまた戻る(gridview活動)または削除するオプションがあります。アクティビティの終了後にインテントで値を送信する方法

私が削除した場合は、gridviewを更新する必要があるため、「eey、アイテムを削除しました。あなたは更新する必要があります」という変数を送信する必要があります。

私はstartActivityForResultで2番目のアクティビティを開く必要があると思いますが、値をどのように設定するべきかわかりません。

オプション1(back arrow):アクティビティを終了します。結果は返されません。 オプション2(アイテムを削除):アクティビティを終了し、結果を元に戻します。

ありがとうございます!

+0

'startActivityForResult(intent、requestCode)'を使用します。 –

+0

これを確認してくださいhttp://stackoverflow.com/a/10407371/1911784 – OMAK

答えて

13

カスタム結果を設定できます。 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); 
    } 
} 
4

はい、startActivityForResultを使用する必要があります。アイテムの情報を示して活動に仕上げを呼び出す前に、あなたはGridViewの活動で

setResult(resultCode, data); 
finish(); 

を呼び出す必要が呼び出されます

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

希望これは

ファーストクラス

を支援
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 
     } 
    } 
} 

第2クラス

Intent returnIntent = new Intent(); 
returnIntent.putExtra("result", "your message"); 
setResult(RESULT_OK, returnIntent); 
finish(); 
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); 
} 

にデフォルトの結果を設定する必要があり、それが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(); 
     } 
    } 
} 
0

我々はこれを使って意思を通じて新しいactivity.Send値を開始することができます。..

テントメイン=新しいテント(MainActivity.this、SecondActivity.class)。 main.putExtra( "JobId"、jobid); startActivityForResult(audio、requestCode);

は次のようにSecondActivityで値を受け取る。..

int型ジョブID = getIntent()getExtras()のgetInt( "JOBID")。。。

0

は、私は、活動Bに活動Aから行きたいと言います値をBに渡し、最後に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 

    } 
0

活性終了する必要はありませんが

のGridViewはinvalidateViews()メソッドを有する

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

このメソッドを呼び出すと、「すべてのビューを再構築して再描画します。」

スタートからActivityB AcivityA startActivityForResultによって:

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

AcivityAにデータを送信するために使用setResult ActivityB

0

まあ、私はこの方法を行っています。

これはあなたを助けることを願っています

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

:3210

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

ActivityA onActivityResult としてActivityBによって送信されたデータを受け取ります。

関連する問題