我正在創建一個動態表單活動,我得到如何從一個數據庫的形式指示。該活動實質上只是滾動問題列表並查看它們是什麼類型並添加它們。所以這是一個增加視圖作爲問題的活動。這一切都很好。我試圖將回答/問題保留在僅限於基本問題子類的特定問題類中。如何通過一個單獨的參數通過相機意圖android
我遇到的問題是,當我嘗試添加相機「問題」以提示用戶拍照時,我無法在視圖中看到結果。我在視圖中管理啓動活動,並將結果返回到問卷活動。這個活動並不知道它要添加到哪個問題,因爲它都是動態完成的。所以我嘗試通過作爲攝影機意圖中額外的問題來通過questionId並在調查問卷活動中接收它,然後滾動查看所添加的問題,並且如果它是相同的問題,則將圖片添加到與其關聯的問題。
它增加問題的方式是通過在每個部件中插入一個視圖組。
這是啓動相機的相關部分(我嘗試過沒有使用捆綁包)。 這是一個BaseQuestion的子類,只是一個一個的LinearLayout的子類裏面:
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
Bundle bundle = new Bundle();
bundle.putInt("questionId", getQuestionId());
intent.putExtras(bundle);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(
Environment.getExternalStorageDirectory(), "image.tmp")));
((Activity)getContext()).startActivityForResult(intent, TAKE_PHOTO);
這是處理其結果是在一個活動的相關部分。
protected void onActivityResult(int requestCode, int resultCode,
Intent imageReturnedIntent) {
super.onActivityResult(requestCode, resultCode, imageReturnedIntent);
Bitmap image = null;
switch (requestCode)
{
case TAKE_PHOTO:
{
if (resultCode == RESULT_OK)
{
InputStream inputStream = null;
File file = new File(Environment.getExternalStorageDirectory(),
"image.tmp");
try {
inputStream = new FileInputStream(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
if (inputStream == null) {
Uri uri = imageReturnedIntent.getData();
try {
inputStream = getContentResolver().openInputStream(uri);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
image = createScaledBitmapFromStream(inputStream, 200, 300);
Bundle bundle = imageReturnedIntent.getExtras();
if (bundle != null)
{
int questionId = bundle.getInt("questionId");
for (BaseQuestion questionView : questionViews)
{
if (questionId == questionView.getQuestionId())
{
questionView.setResponse(image);
}
}
}
}
else if (resultCode == Activity.RESULT_CANCELED)
{
Log.d("something", "something");
}
break;
}
}
}
編輯:解決了,可能無法從答案
我在超我設置爲-1作出明確questionIdForResult。然後,我在運行startActivityForResult時將它設置爲questionId,然後在onActivityResult中檢查每個問題,如果它們的questionIdForResult與它們的questionId匹配,那麼使用那個。然後我把它設置回-1以確定你是否有兩個,它不會去到另一個。
但是我怎麼能通過它呢?這聽起來像是你建議將變量作爲全局值存儲在活動中。我仍然有問題在沒有事先知道id的情況下將它傳遞迴活動。當從相機回來時,我怎麼把它傳回去? – Gentatsu
@Gentatsu:「我還有一個問題,就是在沒有事先知道id的情況下將它傳回給活動」 - 如果你有足夠的「id知識」將它放入額外的'Intent'中, startActivity()',你有足夠的「ID知識」來簡單地把它保存在數據成員的活動中。 – CommonsWare
它創建時知道每個問題的所有id,但不知道里面發生了什麼。該活動僅充當一個容器。這是去CameraQuestionView - > CameraActivity - > QuestionnaireActivity。如果它返回到CameraQuestionView,我會很好。這個活動持有所有的ID,它不能區分哪一個添加信息,我只需要告訴它需要去哪一個。 對不起,如果我聽起來粗魯無禮,但它是相當令人沮喪的試圖得到我想說的話連貫的足夠。 – Gentatsu