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

