-1

I have used materialTabHost and viewPager in MainActivity for swipeable tab views. Also I have added navigation drawer. When I click on any item listed in navigation drawer, it will opens related fragment. and when I click back it will takes me to MainActivity. But here the issue is with sharing intent which is also listed in navigation drawer. When I clicks on share, it will opens share dialogue but by pressing back button it doesn't leads me to MainActivity instead app goes closed.

Here is the relevant code:

...........    
mDrawerToggle = getActionBarDrawerToggle();
    mDrawerLayout.setDrawerListener(mDrawerToggle);
    mDrawerList = (ListView) findViewById(R.id.list_drawer);
    mListTitles = new String[]{
            getString(R.string.title_section1),
            getString(R.string.title_section2),
            getString(R.string.title_section3),
            getString(R.string.title_section4),
            getString(R.string.title_section5),
    };
    mDrawerList.setAdapter(new ArrayAdapter<>(this,
            R.layout.drawer_list_item, mListTitles));
.....

void newFragment(int position) {

        switch (position) {
            case 0:
                mFragment = new VideoFragment(AppGlobals.DIRECTORY.VIDEOS);
                mViewPager.removeAllViews();
                FragmentManager fragmentManager = getSupportFragmentManager();
                fragmentManager.executePendingTransactions();
                fragmentManager.beginTransaction().replace(R.id.container, mFragment).commit();
                break;
            case 1:
                mFragment = new VideoFragment(AppGlobals.DIRECTORY.PICTURES);
                mViewPager.removeAllViews();
                FragmentManager fragmentManager2 = getSupportFragmentManager();
                fragmentManager2.executePendingTransactions();
                fragmentManager2.beginTransaction().replace(R.id.container, mFragment).commit();
                break;
            case 2:
                mFragment = new SettingFragment();
                mViewPager.removeAllViews();
                FragmentManager fragmentManager3 = getSupportFragmentManager();
                fragmentManager3.executePendingTransactions();
                fragmentManager3.beginTransaction().replace(R.id.container, mFragment).commit();
                break;
            case 3:
                mFragment = new AboutFragment();
                mViewPager.removeAllViews();
                FragmentManager fragmentManager4 = getSupportFragmentManager();
                fragmentManager4.executePendingTransactions();
                fragmentManager4.beginTransaction().replace(R.id.container, mFragment).commit();
                break;
            case 4:

                Intent shareIntent = new Intent(Intent.ACTION_SEND);
                shareIntent.setType("text/plain");
                StringBuilder shareBody = new StringBuilder().append("Hey, I just downloaded abc app. Really awesome app for Background/Silent video recording. Helpful for stopping bribe takers. Download from below link: https://play.google.com/store/apps/details?id=").append(getPackageName().toString());
                shareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "abc app [High Definition]");
                shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareBody.toString());
                startActivity(Intent.createChooser(shareIntent, "Share via"));
                break;
            default:
                return;
        }
    }

is there any intent flag available or need to make some changes. Help me please. Thanks.

1 Answers1

0

Is your application crashing because it does not respond to share results ? You should show your logs.

I'm guessing this is normal behavior and the back request is being sent to you app, making it exit, because this is the next step back. You can catch the exit request, and do what you like.

    @Override
    public void exit()
    {
        Log.e(TAG, "exit");
    }

Maybe an alert dialog on the lines of do you really want to quit yes|no. See also onPause().

Also Try using:

    public static final int     ACTIVITY_CREATE       = 0;

Intent i = Intent.createChooser(shareIntent, "Share via");
 startActivityForResult(i, ACTIVITY_CREATE);

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent intent)
    {
        if(resultCode == RESULT_CANCELED)
        {
            Log.e(TAG, "onActivityResult RESULT_CANCELED");
        }
        switch (requestCode)
        {
            case ACTIVITY_CREATE:
                if (resultCode == RESULT_OK)
                {
                    Log.v(TAG, "onActivityResult ACTIVITY_CREATE");
                }
                break;
....
Jon Goodwin
  • 9,053
  • 5
  • 35
  • 54