我想在我的應用程序中打開PDF文件。startActivityForResult返回到錯誤的活動
我通過使用此代碼,在孩子的活動這樣做:
Intent addPDFIntent = new Intent();
addPDFIntent.setType("*/*");
addPDFIntent.setAction(Intent.ACTION_GET_CONTENT);
addPDFIntent.addCategory(Intent.CATEGORY_OPENABLE);
startActivityForResult(addPDFIntent, REQUEST_CODE);
這工作,因爲它可以讓我去我的文件瀏覽器,並選擇一個文件。但是,一旦我選擇了該文件,程序就會轉到我的MainActivity的(父)OnActivityResult,其resultCode爲0,並且requestCode爲0,其中data == null。
我期望它做的(它沒有做的)返回到調用intent的onActivityResult()方法的活動。我已經實現了(除了一個日誌告訴我它是否被輸入之外沒有其他身體) - 但它永遠不會進入這個方法。它返回到我的MainActivity沒有數據。
有人可以幫我理解爲什麼這樣嗎?
EDIT2:此外,這第二個活動啓動StartActivityForResult,但我從來沒有在我的addPDF過程中調用finish()。
編輯:根據要求,這裏的違規類。
public class PasteActivity extends Activity {
public static final String KEY_PASTE = "paste";
public static final String KEY_TEXT = "text";
public static final String TAG = "SPREE";
static final int REQUEST_CODE = 2;
private EditText mPasteField;
private Button mDoneButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_paste);
Log.i("SPREE", "onCreated");
mPasteField = (EditText) findViewById(R.id.pasteField);
mDoneButton = (Button) findViewById(R.id.doneButton);
textShared();
final Intent returnToMain = new Intent(this, MainActivity.class);
returnToMain.putExtra(KEY_PASTE, mPasteField.getText().toString()
.trim());
returnToMain.setAction(Intent.ACTION_DEFAULT);
mDoneButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = getIntent();
if (Intent.ACTION_SEND.equals(intent.getAction())) {
startActivity(returnToMain);
} else {
Intent data = new Intent();
data.putExtra(KEY_PASTE, mPasteField.getText().toString()
.trim());
setResult(RESULT_OK, data);
finish();
}
}
});
Bundle received = getIntent().getExtras();
String receievedString = received.getString(MainActivity.KEY_TO_READ);
mPasteField.setText(receievedString);
if (savedInstanceState != null) {
// maintains typed text
mPasteField.setText(savedInstanceState.getString(KEY_TEXT));
}
}
void textShared() {
Log.i("SREE", "textShared()");
Intent intent = getIntent();
String action = intent.getAction();
String type = intent.getType();
if (Intent.ACTION_SEND.equals(action) && type != null) {
if ("text/plain".equals(type)) {
handleSendText(intent);
}
}
}
void handleSendText(Intent intent) {
String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT);
if (sharedText != null)
mPasteField.setText(sharedText);
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
savedInstanceState
.putString(KEY_TEXT, mPasteField.getText().toString());
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.paste, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
switch (item.getItemId()) {
case R.id.clearText:
mPasteField.setText("");
return true;
case R.id.pasteText:
ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
if (clipboard.hasPrimaryClip()) {
@SuppressWarnings("deprecation")
String pasteText = clipboard.getText().toString();
mPasteField.setText(pasteText);
} else
Toast.makeText(this, "Nothing to paste.", Toast.LENGTH_SHORT)
.show();
return true;
case R.id.addPDF:
Intent addPDFIntent = new Intent();
addPDFIntent.setType("*/*");
addPDFIntent.setAction(Intent.ACTION_GET_CONTENT);
addPDFIntent.addCategory(Intent.CATEGORY_OPENABLE);
startActivityForResult(addPDFIntent, REQUEST_CODE);
return true;
default:
return true;
}
}
@Override
protected void onStart() {
super.onStart();
textShared();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.i(TAG, "WORKS!");
}
這是你在哪裏調用上面的方法,一個片段或活動? –
我在Activity B中調用上面的方法。當我選擇一個文件時。它轉到活動A(主)並在那裏調用沒有數據和錯誤的resultCode的ActivityResult。 – Doronz
你在這個活動B中實現onActivityResult()嗎? –