Вызовите Intent.ACTION_PICK из tabHost и вернитесь к onActivityResult. Как? - PullRequest
0 голосов
/ 21 января 2012

Я искал простое решение для этой проблемы, но не смог найти его, так что вот так:

У меня есть приложение с вкладкой, которая управляет одним веб-просмотром. Если нажата вкладка 1, я выполняю вызов javascript в веб-представлении и т. Д., И таким образом я контролирую содержимое этого простого приложения.

Теперь я хочу иметь возможность запустить галерею изображений / видео и выбрать какой-либо носитель, но это вызывает у меня головную боль. Он запущен, но когда я выбрал какой-то носитель, приложение просто мгновенно закрывается (без принудительного закрытия, просто исчезает).

Я добавил метод onActivityResult в свое приложение, но он не вызывается, и я не знаю почему.

Это часть моего кода (все в одном классе активности):

mTabHost = getTabHost();
    mTabHost.addTab(mTabHost.newTabSpec("tab_test1").setIndicator("Tab1", getResources().getDrawable(R.drawable.iphone)).setContent(R.id.webview));
    mTabHost.addTab(mTabHost.newTabSpec("tab_test2").setIndicator("Tab2", getResources().getDrawable(R.drawable.about)).setContent(R.id.webview));
    mTabHost.addTab(mTabHost.newTabSpec("tab_test3").setIndicator("Tab3", getResources().getDrawable(R.drawable.events)).setContent(R.id.webview));
    mTabHost.addTab(mTabHost.newTabSpec("tab_test4").setIndicator("Tab4", getResources().getDrawable(R.drawable.free)).setContent(R.id.webview));     
    mTabHost.addTab(mTabHost.newTabSpec("tab_test5").setIndicator("Tab5", getResources().getDrawable(R.drawable.video)).setContent(R.id.webview));
    mTabHost.getCurrentView().setVisibility(View.VISIBLE);

    mTabHost.setOnTabChangedListener(new OnTabChangeListener() {
        public void onTabChanged(String arg0) {         
            if(mTabHost.getCurrentTab() == 0)
            {
                Log.i("***Selected Tab", "Im currently in tab with index::" + mTabHost.getCurrentTab());
                side1(mWebView);
            }
            if(mTabHost.getCurrentTab() == 1)
            {
                Log.i("***Selected Tab", "Im currently in tab with index::" + mTabHost.getCurrentTab());
                side2(mWebView);
            }
            if(mTabHost.getCurrentTab() == 2)
            {
                Log.i("***Selected Tab", "Im currently in tab with index::" + mTabHost.getCurrentTab());
                side3(mWebView);
            }
            if(mTabHost.getCurrentTab() == 3)
            {
                Log.i("***Selected Tab", "Im currently in tab with index::" + mTabHost.getCurrentTab());
                side4(mWebView);
            }
            if(mTabHost.getCurrentTab() == 4)
            {
                Log.i("***Selected Tab", "Im currently in tab with index::" + mTabHost.getCurrentTab());
                side5(mWebView);
                openStuff();
            }
        }       
    });     



public void openStuff()
{
    Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
    photoPickerIntent.setType("image/*");

    startActivityForResult(photoPickerIntent, 1);

}


protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) { 
    super.onActivityResult(requestCode, resultCode, imageReturnedIntent); 

    switch(requestCode) { 
    case 1:
        if(resultCode == RESULT_OK){  
            Uri selectedImage = imageReturnedIntent.getData();
            String[] filePathColumn = {MediaStore.Images.Media.DATA};

            Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
            cursor.moveToFirst();

            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
            String filePath = cursor.getString(columnIndex);
            cursor.close();

            Bitmap yourSelectedImage = BitmapFactory.decodeFile(filePath);
        }
    }
}

1 Ответ

0 голосов
/ 21 января 2012

В этой вашей проблеме вы должны написать свой код в методе onResume () вместо onActivityResult.для логики управления pro-pare вы должны поддерживать флаги на каждой вкладке и писать метод onResume для всех.
Например:

@Override
     protected void onResume() {<br>
             // TODO Auto-generated method stub<br>
             super.onResume();<br>
     }

Я думаю, вы знаете активность жизненный цикл :

steps : onCreate() - onDestroy()<br>
onStart() / onRestart() - onStop()<br>
onResume() - onPause()
...