Searchfragment adds to the stack stack several times when I do a search using actionbar searchview android

I am using action-bar-view-view. I create a fragment whenever a search ever occurs, but my problem is that the fragment adds backstack whenever a new search occurs

The code:

private void handleIntent(Intent intent) {

     if (Intent.ACTION_SEARCH.equals(getIntent().getAction())) 
      {
         QueryString = getIntent().getStringExtra(SearchManager.QUERY);
         bundle.putString("videourl",getResources().getString(R.string.serviceurl)+"/Getresults/"+((GloabalClass)getApplicationContext()).getShared().getString("StationID", "null")+"/"+QueryString);
         bundle.putBoolean("append", true);
         bundle.putString("xmlroles", session.getUserDetails().get(SessionManager.KEY_NAME).get(1));
         bundle.putString("ChannelID", "null");
         SearchRecentSuggestions suggestions = new SearchRecentSuggestions(this,
                MySuggestionProvider.AUTHORITY, MySuggestionProvider.MODE);
         suggestions.saveRecentQuery(QueryString, null);

         FragmentTransaction ft = getFragmentManager().beginTransaction();
         SearchFragment searchfragment = new SearchFragment();
         searchfragment.setArguments(bundle);
         ft.replace(R.id.content_frame, searchfragment);
         ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
         ft.addToBackStack(null);  
         ft.commit();
         mDrawerToggle.setDrawerIndicatorEnabled(false);
         getActionBar().setDisplayHomeAsUpEnabled(true);
         ((GloabalClass)getApplicationContext()).setSearch_tab_selection(0);

      }

  }

how can I avoid creating a backstack fragment if it has already been added.

+3
source share
1 answer

try it

    FragmentManager fragMan = getFragmentManager();
            Fragment newFragment = null;
            String fragTag = "yourTag";
            newFragment = fragMan.findFragmentByTag(fragTag);
            if(newFragment == null)
                newFragment = new SearchFragment();
            else
                ((SearchFragment)newFragment).publicMethod(arguments);

            FragmentTransaction transaction = fragMan.beginTransaction();
            transaction.replace(R.id.main_fragment, newFragment, fragTag);
            transaction.addToBackStack(null);
            transaction.commit();

Instead of adding new snippets each time, this code searches for an existing snippet added with the same tag.

0
source

All Articles