Aller au contenu

[Probleme] Fragment ImageView


Drakilster

Recommended Posts

Salut,Voila j'ai réediter mon poste,pour que vous me compreniez mieux.

Dans mon application j'ai 1 page Principal avec Une Tabhost et un viewpager.

J'ai 4 tabs fragment nommée 1-Lecteur 2-News 3-Tchat 4-Contact.

J'ai un problème au niveaux que quand je passe d'un layout a un autre.

C'est a Dire :

1-Je suis dans lecteur dans lecteur ce trouve une image avec un boutonPlay dessus.

2-J'appuie sur cette image du coups il affiche une nouvelle Image boutonstop et chargement ci-dessous.

3-Je change de page je vais à Tchat donc deux layout plus loin.

4-Je retourne a Lecteur mon image et redevenue BoutonPlay.

Voila exactement mon probleme.

Par contre j'ai remarque que c'est en faite le OnCreateView qui s'active a chaque fois je fait plus de deux layout.

Deuxième chose si je bouge a 1 layout donc News ben la page reste identique.

maitenant voici les codes.

Pour la page pincipal :

public class PagePrincipal extends FragmentActivity implements TabHost.OnTabChangeListener, ViewPager.OnPageChangeListener {
private TabHost mTabHost;
private ViewPager mViewPager;
private HashMap<String, TabInfo> mapTabInfo = new HashMap<String, PagePrincipal.TabInfo>();
private PagerAdapter mPagerAdapter;
/**
*
* @author mwho
* Maintains extrinsic info of a tab's construct
*/
private class TabInfo {

private String tag;
	 private Class<?> clss;
	 private Bundle args;
	 private Fragment fragment;
	 TabInfo(String tag, Class<?> clazz, Bundle args) {
	 this.tag = tag;
	 this.clss = clazz;
	 this.args = args;
	 }
}
/**
* A simple factory that returns dummy views to the Tabhost
* @author mwho
*/
class TabFactory implements TabContentFactory {
private final Context mContext;
 /**
 * @param context
 */
 public TabFactory(Context context) {
	 mContext = context;
 }
 /** (non-Javadoc)
 * @see android.widget.TabHost.TabContentFactory#createTabContent(java.lang.String)
 */
 public View createTabContent(String tag) {
	 View v = new View(mContext);
	 v.setMinimumWidth(0);
	 v.setMinimumHeight(0);
	 return v;
 }
}
/** (non-Javadoc)
* @see android.support.v4.app.FragmentActivity#onCreate(android.os.Bundle)
*/
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Inflate the layout
setContentView(R.layout.pageprincipal);
 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
// Initialise the TabHost
this.initialiseTabHost(savedInstanceState);
if (savedInstanceState != null) {
	 mTabHost.setCurrentTabByTag(savedInstanceState.getString("tab")); //set the tab as per the saved state
 }
// Intialise ViewPager
this.intialiseViewPager();
}
/** (non-Javadoc)
 * @see android.support.v4.app.FragmentActivity#onSaveInstanceState(android.os.Bundle)
 */
protected void onSaveInstanceState(Bundle outState) {
 outState.putString("tab", mTabHost.getCurrentTabTag()); //save the tab selected
 super.onSaveInstanceState(outState);
}
/**
 * Initialise ViewPager
 */
private void intialiseViewPager() {
 List<Fragment> fragments = new Vector<Fragment>();
fragments.add(Fragment.instantiate(this, PageLecteur.class.getName()));
fragments.add(Fragment.instantiate(this, PageNews.class.getName()));
fragments.add(Fragment.instantiate(this, PageTchat.class.getName()));
fragments.add(Fragment.instantiate(this, PageContact.class.getName()));
mPagerAdapter = new MesPagesViews(super.getSupportFragmentManager(), fragments);
//
mViewPager = (ViewPager)super.findViewById(R.id.viewpager);
mViewPager.setAdapter(this.mPagerAdapter);
mViewPager.setOnPageChangeListener(this);
}
/**
* Initialise the Tab Host
*/
private void initialiseTabHost(Bundle args) {
mTabHost = (TabHost)findViewById(android.R.id.tabhost);
 mTabHost.setup();
 TabInfo tabInfo = null;
 Resources res = getResources();
 PagePrincipal.AddTab(this, this.mTabHost, this.mTabHost.newTabSpec("Tab1").setIndicator("Radio",res.getDrawable(R.drawable.btplay)), ( tabInfo = new TabInfo("Tab1", PageLecteur.class, args)));
 this.mapTabInfo.put(tabInfo.tag, tabInfo);
 PagePrincipal.AddTab(this, this.mTabHost, this.mTabHost.newTabSpec("Tab2").setIndicator("Nouveauté",res.getDrawable(R.drawable.newslogo)), ( tabInfo = new TabInfo("Tab2", PageNews.class, args)));
 this.mapTabInfo.put(tabInfo.tag, tabInfo);
 PagePrincipal.AddTab(this, this.mTabHost, this.mTabHost.newTabSpec("Tab3").setIndicator("Tchat",res.getDrawable(R.drawable.logotchat)), ( tabInfo = new TabInfo("Tab3", PageTchat.class, args)));
 this.mapTabInfo.put(tabInfo.tag, tabInfo);
 PagePrincipal.AddTab(this, this.mTabHost, this.mTabHost.newTabSpec("Tab4").setIndicator("Contact",res.getDrawable(R.drawable.contactlogo)), ( tabInfo = new TabInfo("Tab4", PageContact.class, args)));
 this.mapTabInfo.put(tabInfo.tag, tabInfo);
 // Default to first tab
 //this.onTabChanged("Tab1");
 //
 mTabHost.setOnTabChangedListener(this);
}
/**
* Add Tab content to the Tabhost
* @param activity
* @param tabHost
* @param tabSpec
* @param clss
* @param args
*/
private static void AddTab(PagePrincipal activity, TabHost tabHost, TabHost.TabSpec tabSpec, TabInfo tabInfo) {
// Attach a Tab view factory to the spec
tabSpec.setContent(activity.new TabFactory(activity));
 tabHost.addTab(tabSpec);
}
/** (non-Javadoc)
* @see android.widget.TabHost.OnTabChangeListener#onTabChanged(java.lang.String)
*/
public void onTabChanged(String tag) {
//TabInfo newTab = this.mapTabInfo.get(tag);
int pos = this.mTabHost.getCurrentTab();
this.mViewPager.setCurrentItem(pos);
}
/* (non-Javadoc)
* @see android.support.v4.view.ViewPager.OnPageChangeListener#onPageScrolled(int, float, int)
*/
public void onPageScrolled(int position, float positionOffset,
int positionOffsetPixels) {
// TODO Auto-generated method stub
}
/* (non-Javadoc)
* @see android.support.v4.view.ViewPager.OnPageChangeListener#onPageSelected(int)
*/
public void onPageSelected(int position) {
// TODO Auto-generated method stub
this.mTabHost.setCurrentTab(position);
}
/* (non-Javadoc)
* @see android.support.v4.view.ViewPager.OnPageChangeListener#onPageScrollStateChanged(int)
*/
public void onPageScrollStateChanged(int state) {
// TODO Auto-generated method stub
}
}

Voici le code du lecteur :

public class PageLecteur extends Fragment implements onclickListener {
ImageView Lecteur;
Thread readingThread;
MediaPlayer mediaPlayer;
Context LecteurContext;
static ProgressBar Chargement1;
static TextView Chargement2;
static Context context;
int LecteurOnOff;
static PageLecteur pageFragment;
private String URL_radio="http://5.39.61.109:8500";




@Override
public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 context = getActivity().getApplicationContext();
	 LecteurOnOff=3;

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {	
 View view = inflater.inflate(R.layout.pagelecteur, container, false);
 Chargement1=(ProgressBar)view.findViewById(R.id.BarCharge);
 Chargement2=(TextView)view.findViewById(R.id.AffCharge);
 Lecteur=(ImageView)view.findViewById(R.id.BtPlayer);

 Lecteur.setonclickListener(this);
 Toast.makeText(context, "Viewlecteur", Toast.LENGTH_SHORT).show();
 return view;
}
public void onclick(View v) {
// TODO Stub de la méthode généré automatiquement

if(v == Lecteur){
 if (LecteurOnOff == 1){
	 Lecteur.setImageResource(R.drawable.btplay);
	 mediaPlayer.stop();
	 LecteurOnOff =0;
	 Chargement1.setVisibility(View.INVISIBLE);
 Chargement2.setVisibility(View.INVISIBLE);
}
 else{
LecteurOnOff =1;
Lecteur.setImageResource(R.drawable.btstop);
Chargement1.setVisibility(View.VISIBLE);
	 Chargement2.setVisibility(View.VISIBLE);
readingThread = new Thread(LancementLecteur);
readingThread.start();

 }
}



}
private Runnable LancementLecteur = new Runnable()
{
 public void run()
	 {
 mediaPlayer = MediaPlayer.create(context,Uri.parse(URL_radio));
	 mediaPlayer.start();
	 }
};
}

Voila merci d'avance pour votre aide.

Lien vers le commentaire
Partager sur d’autres sites

1-Je suis dans lecteur dans lecteur ce trouve une image avec un boutonPlay dessus.

2-J'appuie sur cette image du coups il affiche une nouvelle Image boutonstop et chargement ci-dessous.

3-Je change de page je vais à Tchat donc deux layout plus loin.

4-Je retourne a Lecteur mon image et redevenue BoutonPlay.

C'est parfaitement normal, le viewpager instancie par défaut le fragment courant ainsi que les deux fragments voisins (un à gauche et un à droite).

Il te faut sauvegarder l'état de ton fragment dans le onSaveInstanceState (http://developer.and...roid.os.Bundle)) et le récupérer lors de la re-création de ton fragment.

Btw, ton adapter est mal fichu. tu instancies tous tes fragments puis les injecte dedans. C'est à proscrire (pour des raisons de perfs, et pour la raison ci-dessus). Utilises plutot un FragmentStatePagerAdapter (http://developer.and...gerAdapter.html) comme ceci :

public class MyAdapter extends FragmentStatePagerAdapter{
private static final int NUM_ITEMS = 4;
@Override
public int getCount(){
return NUM_ITEMS;
}

@Override
public Fragment getItem(int position){
switch(position){
case 1: return Fragment.instantiate(this, PageLecteur.class.getName());
case 2: return Fragment.instantiate(this, PageNews.class.getName());
case 3: return Fragment.instantiate(this, PageTchat.class.getName());
case 4: return Fragment.instantiate(this, PageContact.class.getName());
}
}

}

J'espere que ça t'aidera, n'hésite pas à me poser des questions ou à me tweeter si tu as des soucis ou si tu veux des détails.

A+

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...