Thank you I will try it this evening!!
Please can you help me also with the screen orientation??? I used the 
setRetainIstance(true) but it donìt work!!

On Thursday, October 18, 2012 10:08:08 AM UTC+2, Piren wrote:
>
>
> http://developer.android.com/reference/android/support/v4/view/ViewPager.html#setOffscreenPageLimit(int)
>
> just set it to 2
>
> On Wednesday, October 17, 2012 7:30:54 PM UTC+2, Giosia Gentile wrote:
>>
>> it is one week I try to solve this problem whitout success. Please 
>> help me. 
>>
>> I use the tabs navigation with viewpager. This is the class where I 
>> put the tabs and the FragmentPagerAdapter class: 
>> public class Detail extends SherlockFragmentActivity { 
>>
>>     ViewPager  mViewPager; 
>>
>>     TabsAdapter mTabsAdapter; 
>>
>>
>>     @Override 
>>     public void onCreate(Bundle savedInstanceState) { 
>>
>>         super.onCreate(savedInstanceState); 
>>
>>
>>         setContentView(R.layout.activity_main); 
>>
>>      ... 
>>
>>
>>
>>      ActionBar bar = getSupportActionBar(); 
>>      bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
>>      bar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE); 
>>
>>      mViewPager = (ViewPager)findViewById(R.id.pager); 
>>
>>      // Add the tabs 
>>      mTabsAdapter = new TabsAdapter(this, bar, mViewPager); 
>>      mTabsAdapter.addTab(bar.newTab().setText(R.string.filmtab), 
>>              FragmentFilm.class, null); 
>>      mTabsAdapter.addTab(bar.newTab().setText(R.string.cinematab), 
>>              FragmentCinema.class, null); 
>>      mTabsAdapter.addTab(bar.newTab().setText(R.string.dintornitab), 
>>              FragmentPdi.class, null); 
>>
>>
>>
>>      if (savedInstanceState != null) { 
>>   
>> bar.setSelectedNavigationItem(savedInstanceState.getInt("tab")); 
>>      } 
>>
>>
>>
>>     } 
>>
>>
>>      @Override 
>>         protected void onSaveInstanceState(Bundle outState) { 
>>             super.onSaveInstanceState(outState); 
>>             outState.putInt("tab", 
>> getSupportActionBar().getSelectedNavigationIndex()); 
>>         } 
>>
>>
>>      public static class TabsAdapter extends FragmentPagerAdapter 
>>      implements ViewPager.OnPageChangeListener, ActionBar.TabListener 
>> { 
>>          private final Context mContext; 
>>          private final ActionBar mBar; 
>>          private final ViewPager mViewPager; 
>>          private final ArrayList<TabInfo> mTabs = new 
>> ArrayList<TabInfo>(); 
>>
>>          static final class TabInfo { 
>>              private final Class<?> clss; 
>>              private final Bundle args; 
>>
>>              TabInfo(Class<?> _class, Bundle _args) { 
>>                  clss = _class; 
>>                  args = _args; 
>>              } 
>>          } 
>>
>>          public TabsAdapter(Detail activity, ActionBar bar, ViewPager 
>> pager) { 
>>              super(activity.getSupportFragmentManager()); 
>>              mContext = activity; 
>>              mBar = bar; 
>>              mViewPager = pager; 
>>              mViewPager.setAdapter(this); 
>>              mViewPager.setOnPageChangeListener(this); 
>>          } 
>>
>>          public void addTab(ActionBar.Tab tab, Class<? extends 
>> Fragment> clss, Bundle args) { 
>>              TabInfo info = new TabInfo(clss, args); 
>>              tab.setTag(info); 
>>              tab.setTabListener(this); 
>>              mTabs.add(info); 
>>              mBar.addTab(tab); 
>>              notifyDataSetChanged(); 
>>          } 
>>
>>          @Override 
>>          public int getCount() { 
>>              return mTabs.size(); 
>>          } 
>>
>>          @Override 
>>          public Fragment getItem(int position) { 
>>              TabInfo info = mTabs.get(position); 
>>              return Fragment.instantiate(mContext, 
>> info.clss.getName(), info.args); 
>>          } 
>>
>>          @Override 
>>          public void onPageScrolled(int position, float 
>> positionOffset, int positionOffsetPixels) { 
>>          } 
>>
>>          @Override 
>>          public void onPageSelected(int position) { 
>>              mBar.setSelectedNavigationItem(position); 
>>          } 
>>
>>          @Override 
>>          public void onPageScrollStateChanged(int state) { 
>>          } 
>>
>>          @Override 
>>          public void onTabSelected(Tab tab, FragmentTransaction ft) { 
>>              Object tag = tab.getTag(); 
>>              for (int i=0; i<mTabs.size(); i++) { 
>>                  if (mTabs.get(i) == tag) { 
>>                      mViewPager.setCurrentItem(i); 
>>                  } 
>>              } 
>>          } 
>>
>>          @Override 
>>          public void onTabUnselected(Tab tab, FragmentTransaction ft) 
>> { 
>>
>>          } 
>>
>>          @Override 
>>          public void onTabReselected(Tab tab, FragmentTransaction ft) 
>> { 
>>
>>          } 
>>      } 
>> } 
>>
>> The 3 fragment classes are all the same I copy here just one; In the 
>> fragment class I use async task for download the data I need to put in 
>> the view, I do this in the onActivityCreated method: 
>>
>> public class FragmentFilm extends SherlockFragment 
>> { 
>>
>>     private Detail act; 
>>
>>     private DetailedRec detail_film; 
>>     private View view; 
>>     private String a; 
>>
>>
>>
>>
>>     @Override 
>>     public View onCreateView(LayoutInflater inflater, ViewGroup 
>> container, 
>>             Bundle savedInstanceState) 
>>     { 
>>
>>
>>
>>         setRetainInstance(true); 
>>         view = inflater.inflate(R.layout.tab_film_info, container, 
>> false); 
>>
>>         return view; 
>>     } 
>>
>>     /* 
>>     @Override 
>>     public void onSaveInstanceState(Bundle outState) { 
>>         super.onSaveInstanceState(outState); 
>>
>>
>>     }*/ 
>>
>>
>>     @Override 
>>     public void onCreate(Bundle savedInstanceState) { 
>>         super.onCreate(savedInstanceState); 
>>
>>         act =  (Detail) getActivity(); 
>>
>>
>>     } 
>>
>>
>>
>>
>>     @Override 
>>     public void onActivityCreated(Bundle savedInstanceState) { 
>>         super.onActivityCreated(savedInstanceState); 
>>         new DownloadFilmDetailAsyncTask().execute(); 
>>
>>
>>     } 
>>
>>
>>
>>     private class DownloadFilmDetailAsyncTask extends AsyncTask<Void, 
>> DetailedRec, Void> 
>>     { 
>>
>>         @Override 
>>         protected void onPreExecute() { 
>>
>>             super.onPreExecute(); 
>>
>>
>>         } 
>>
>>         @Override 
>>         protected void onPostExecute(Void result) { 
>>
>>             super.onPostExecute(result); 
>>
>>             ProgressBar prBar = 
>> (ProgressBar)getView().findViewById(R.id.progressbar_film); 
>>             prBar.setVisibility(View.GONE); 
>>             ScrollView lay = 
>> (ScrollView)getView().findViewById(R.id.tab_filmsummary); 
>>             lay.setVisibility(View.VISIBLE); 
>>
>>
>>         } 
>>
>>         @Override 
>>         protected Void doInBackground(Void... params) 
>>         { 
>>             try 
>>             { 
>>
>>
>>                 String locale = 
>> getResources().getConfiguration().locale.getDisplayName(); 
>>
>>
>>                 JSONObject objSend = new JSONObject(); 
>>                 objSend.put("idFilm", act.getIdFilm()); 
>>                 objSend.put("cinemaId",act.getIdCinema()); 
>>                 int ind = locale.indexOf("("); 
>>                 String locale_send = locale.substring(0, ind-1); 
>>                 objSend.put("locale", locale_send); 
>>                 ArrayList<String> otherCin = new 
>> ArrayList<String>(Arrays.asList(act.getOtherCinemas())); 
>>                 JSONArray othCin = new JSONArray(otherCin); 
>>                 objSend.put("otherCinemas", othCin ); 
>>                 JSONObject jsonObject = 
>> sendAndGetJSONObject(JSON_SERVER+"JsonServer?op=getFilmbyId",objSend); 
>>
>>
>>
>>                 DetailedRec detail_rec = new DetailedRec(); 
>>                 //FILM 
>>                 detail_rec.setFilmId(jsonObject.getString("filmId")); 
>>                 detail_rec.setName(jsonObject.getString("name")); 
>>   
>> detail_rec.setImageUrl(jsonObject.getString("imageUrl").replace("640", 
>> "80")); 
>>                 detail_rec.setActors(jsonObject.getString("actors")); 
>>                 detail_rec.setGenre(jsonObject.getString("genre")); 
>>   
>> detail_rec.setDirector(jsonObject.getString("director")); 
>>                 detail_rec.setPlot(jsonObject.getString("plot")); 
>>                 detail_rec.setYear(jsonObject.getString("year")); 
>>   
>> detail_rec.setDuration(jsonObject.getString("duration")); 
>>   
>> detail_rec.setTrailer(jsonObject.getString("trailer")); 
>>                 detail_rec.setRating(jsonObject.getString("rating")); 
>>
>>                 detail_film = detail_rec; 
>>                 publishProgress(detail_rec); 
>>
>>
>>             } 
>>             catch (IOException ignored) 
>>             { 
>>             } 
>>             catch (JSONException ignored) 
>>             { 
>>             } 
>>             return null; 
>>         } 
>>
>>         @Override 
>>         protected void onProgressUpdate(DetailedRec... values) 
>>         { 
>>             for (final DetailedRec detail_rec : values) 
>>             { 
>>
>>                 updateViews(detail_rec); 
>>
>>             } 
>>
>>         } 
>>
>>         private  JSONObject getJSONObject(String url) throws 
>> IOException, MalformedURLException, JSONException 
>>         { 
>>             HttpURLConnection conn = (HttpURLConnection) new 
>> URL(url).openConnection(); 
>>
>>
>>             InputStream in = conn.getInputStream(); 
>>
>>             try 
>>             { 
>>                 StringBuilder sb = new StringBuilder(); 
>>                 BufferedReader r = new BufferedReader(new 
>> InputStreamReader(new DoneHandlerInputStream(in),"WINDOWS_1252")); 
>>                 for (String line = r.readLine(); line != null; line = 
>> r.readLine()) 
>>                 { 
>>                     sb.append(line); 
>>                 } 
>>                 return new JSONObject(sb.toString()); 
>>             } 
>>             finally 
>>             { 
>>                 in.close(); 
>>             } 
>>         } 
>>
>>
>>         private  JSONObject sendAndGetJSONObject(String url,JSONObject 
>> request) throws IOException, MalformedURLException, JSONException 
>>         { 
>>
>>             HttpClient client = new DefaultHttpClient(); 
>>   
>> HttpConnectionParams.setConnectionTimeout(client.getParams(), 
>> 10000); //Timeout Limit 
>>             InputStream in=null; 
>>             try{ 
>>                  HttpPost post = new HttpPost(url); 
>>                  StringEntity se = new 
>> StringEntity(request.toString()); 
>>                  se.setContentType((Header) new 
>> BasicHeader(HTTP.CONTENT_TYPE, "application/json")); 
>>                  post.setEntity(se); 
>>                  HttpResponse response = client.execute(post); 
>>                  HttpEntity entity = response.getEntity(); 
>>                  in = entity.getContent(); 
>>                  StringBuilder sb = new StringBuilder(); 
>>                  BufferedReader r = new BufferedReader(new 
>> InputStreamReader(new DoneHandlerInputStream(in),"WINDOWS_1252")); 
>>                  for (String line = r.readLine(); line != null; line = 
>> r.readLine()) 
>>                  { 
>>                     sb.append(line); 
>>                  } 
>>                  return new JSONObject(sb.toString()); 
>>             }catch(Exception e){ 
>>
>>             } 
>>             finally 
>>             { 
>>                 in.close(); 
>>             } 
>>
>>             return null; 
>>
>>         } 
>>
>>
>>     } 
>>
>>     private void updateViews(final DetailedRec detail_rec){ 
>>         //FILM 
>>         TextView filmName = (TextView) 
>> getView().findViewById(R.id.movieTitle); 
>>         filmName.setText(detail_rec.getName().trim()); 
>>         TextView actors = (TextView) 
>> getView().findViewById(R.id.movieActor); 
>>         actors.setText(detail_rec.getActors().trim()); 
>>         TextView genre = (TextView) 
>> getView().findViewById(R.id.movieGenre); 
>>         genre.setText(detail_rec.getGenre().trim()); 
>>         TextView director = (TextView) 
>> getView().findViewById(R.id.movieDirector); 
>>         director.setText(detail_rec.getDirector().trim()); 
>>         TextView plot = (TextView) 
>> getView().findViewById(R.id.moviePlot); 
>>         plot.setText(detail_rec.getPlot().trim()); 
>>         TextView year = (TextView) 
>> getView().findViewById(R.id.movieYear); 
>>         year.setText(detail_rec.getYear().trim()); 
>>         TextView duration = (TextView) 
>> getView().findViewById(R.id.movieDuration); 
>>         duration.setText(detail_rec.getDuration().trim()); 
>>         ImageView image = (ImageView) 
>> getView().findViewById(R.id.moviePoster); 
>>
>>         new 
>> DownloadImagesTask(detail_rec.getImageUrl().trim().replace("80", 
>> "100")).execute(image); 
>>         // 
>> image.setImageBitmap(downloadBitmap(detail_rec.getImageUrl().trim().replace("80",
>>  
>>
>> "100"))); 
>>         //Rating 
>>         if(detail_rec.getRating().compareTo("N/A")!=0){ 
>>             RatingBar rateBar = 
>> (RatingBar)getView().findViewById(R.id.MovieRatingBar); 
>>   
>> rateBar.setRating(Float.parseFloat(detail_rec.getRating())); 
>>         } 
>>         //Trailer 
>>         Button trailer = (Button)getView().findViewById(R.id.trailer); 
>>         if(detail_rec.getTrailer().compareTo("")!=0){ 
>>             trailer.setVisibility(View.VISIBLE); 
>>             trailer.setOnClickListener(new OnClickListener() { 
>>
>>                 @Override 
>>                 public void onClick(View v) { 
>>                     int index = detail_rec.getTrailer().indexOf("v="); 
>>                     String videoId=""; 
>>                     if(index!=-1){ 
>>                         videoId = 
>> detail_rec.getTrailer().substring(index+2); //"Fee5vbFLYM4"; 
>>                         Intent intent = new Intent(Intent.ACTION_VIEW, 
>> Uri.parse("vnd.youtube:"+videoId)); 
>>                         intent.putExtra("VIDEO_ID", videoId); 
>>                         startActivity(intent); 
>>                     } 
>>
>>
>>                 } 
>>             }); 
>>         } 
>>
>>     } 
>>
>> } 
>>
>> Ok, in my application I want the fragment is load one time. I explain 
>> so good: When I start the Detail class the fragment classes are 
>> istantiate and the AsyncTask in all the 3 fragment start, now when the 
>> user switch from one tab to other I want the fragment in tab 
>> unselected don't lost the data and the view because now when I switch 
>> from one tab to another and then return the first tab this is recreate 
>> and the onActivityCreated method is called again! 
>>
>> Please help me, I search in all place but I dont find solution!! 
>>
>> P.S. I use the SherlockActionBar, I don't know id it is relevant. 
>> Sorry for my bad English 
>>
>> Thank you 
>>
>

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to