OnActivityResult не работает в TabActivityGroup?
Я использую вкладку в качестве основной деятельности, в которой он имеет 4 вкладки. Одна вкладка - группа действий, которая имеет три кнопки. Каждая кнопка - это одно действие. Я использую камеру в одном из этих мероприятий. Я знаю, как это работает, потому что я проверил на карте памяти, что изображение сохраняется, но он не вызывает метод Onactivityresult().
Это для отображения ContentView
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
View viewToLoad = LayoutInflater.from(this.getParent()).inflate(R.layout.enter_expenses, null);
this.setContentView(viewToLoad);
Этот код используется для получения изображения
dbimgguid = UUID.randomUUID();
imagename =dbimgguid.toString();
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
photo = new File(Environment.getExternalStorageDirectory(), "Expenses"+imagename+".jpg");
intent.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(photo));
imageurl = Uri.fromFile(photo);
startActivityForResult(intent, CAMERA_RECEIPTREQUEST);
Это результат активности
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
System.out.println(requestCode);
System.out.println(resultCode);
switch(requestCode)
{
case CAMERA_RECEIPTREQUEST:
if(resultCode== Activity.RESULT_OK)
{
//Toast.makeText(this, "Receipt Image Saved", Toast.LENGTH_SHORT).show();
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 8;
//ImageView jpgView = (ImageView)findViewById(R.id.imageView1);
Bitmap receipt = BitmapFactory.decodeFile(photo.toString(),options);
String image = "Expenses"+imagename+".jpg";
Intent imagepass = new Intent(ExpensesActivity.this,ReviewReceiptImage.class);
imagepass.putExtra("receipt", receipt);
imagepass.putExtra("imagename", image);
startActivityForResult(imagepass, CAMERA_CONFIRMRECEIPT);
Toast.makeText(this, "Receipt Image Saved", Toast.LENGTH_SHORT).show();
}
case CAMERA_CONFIRMRECEIPT:
Toast.makeText(this, "Receipt Image Saved", Toast.LENGTH_SHORT).show();
if(resultCode == CAMERA_CONFIRMRECEIPT)
{
take_receipt.setEnabled(false);
take_receipt.setVisibility(View.GONE);
show_receipt.setEnabled(true);
show_receipt.setVisibility(View.VISIBLE);
}
break;
}
}
Спасибо за помощь ребята
1 ответ
Я решил свою проблему. Пожалуйста, смотрите мой ответ ниже,
В конце концов я выяснил / вспомнил, что проблема в том, что Android допускает только вложенный слой подэтапов... т.е. подэтапы не могут вкладывать субактивиты. Чтобы решить это:
вызов getParent().startActivityForResult()
из вашей под-деятельности ваш родитель (группа активности) сможет обрабатывать onActivityResult. Поэтому я создал подкласс ActivityGroup и обработал этот onActivityResult. Вы можете перенаправить полученный результат обратно в подзадачу, если вам нужно. Просто получите текущую активность по getLocalActivityManager().getCurrentActivity()
, Мои дочерние действия наследуются от пользовательских действий, поэтому я добавил handleActivityResult(requestCode, resultCode, data)
в этом подклассе для ActivityGroup для вызова.
Ответьте на поставленный выше вопрос с точным кодом
ActivityGroup->SubActivities->onActivityResult->ActivityGroup(onActivityResult)->subActivity(onActivityResult)
Это класс ActivityGroup, в котором вы должны определить onActivityResult для всех подэтапов,
@Override
public void onActivityResult(int requestCode,int resultCode, Intent data)
{
switch(requestCode)
{
case CAMERA_RECEIPTREQUEST:
if(resultCode == Activity.RESULT_OK)
{
ExpensesActivity activity = (ExpensesActivity) getLocalActivityManager().getCurrentActivity();
activity.onActivityResult(requestCode, resultCode, data);
}
break;
case CAMERA_CONFIRMRECEIPT:
ExpensesActivity activity1 = (ExpensesActivity) getLocalActivityManager().getCurrentActivity();
activity1.onActivityResult(requestCode, resultCode, data);
}
}
В Sub Activity вы должны установить вид, как показано ниже
View viewToLoad = LayoutInflater.from(this.getParent()).inflate(R.layout.enter_time, null);
this.setContentView(viewToLoad);
Затем в под-деятельности по ActiveResulty()
@Override
public void onActivityResult(int requestCode,int resultCode, Intent data)
{
//Some Code
}