2014-03-13 42 views
0

我想在我的應用程序中打開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!"); 


} 
+0

這是你在哪裏調用上面的方法,一個片段或活動? –

+0

我在Activity B中調用上面的方法。當我選擇一個文件時。它轉到活動A(主)並在那裏調用沒有數據和錯誤的resultCode的ActivityResult。 – Doronz

+0

你在這個活動B中實現onActivityResult()嗎? –

回答

0

使用這樣的

startActivityForResult(addPDFIntent, 1);

你的後

做你的數據挑選函數使用迴歸意向方法

Intent resultIntent = new Intent(); 
    resultIntent.putExtra(PrevGross,your file); 
    setResult(Activity.RESULT_OK, resultIntent); 

低於主類代碼使用..

protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 
    if (resultCode == RESULT_OK)  
    { 
     if (requestCode == 1) 
     { 
      prevgross = data.getExtras().getstring(your content);  
     }}} 

}我希望這段代碼能夠幫助你的應用程序。

+0

我提到過,這已經不起作用了,因爲請求代碼和結果代碼都是0.而數據是空的。 – Doronz

+0

將文件路徑名存儲在您的子類中的全局字符串中,完成該活動後,將從該類中獲取文件路徑名:'filename = childclass.stringname;' – prakash

相關問題