Orientation change will be harder to handle... see this for help:
http://developer.android.com/guide/topics/resources/runtime-changes.html





On Thursday, October 18, 2012 12:40:49 PM UTC+2, Giosia Gentile wrote:
>
> 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