10

アイテムのグリッドビューを表示するアクティビティがあります。それらのいずれかをクリックすると、アイテムの情報を表示する別のアクティビティに移動します。戻る (グリッドビュー アクティビティ) または削除するオプションもあります。

削除すると、グリッドビューを更新する必要があるため、「アイテムを削除しました。更新する必要があります」という変数を送信する必要があります。

startActivityForResult で 2 番目のアクティビティを開く必要があると思いますが、値を設定する方法がわかりません。

オプション 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 のアクティビティで呼び出されます

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

アクティビティを終了する必要はありません

//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

さて、私はこのようにしました:

startActivityForResultによって、ActivityAからActivityB を開始します

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

ActivityBでは、データをActivityAsetResultに送信するために使用します。

@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 に答える
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 に答える