2014-06-30 3 views
-1

J'ai des fragments sous forme d'onglets et j'ai créé une classe d'interface pour analyser une chaîne d'un fragment à un autre fragment dans la même activité de fragment. mais le problème est que j'ai une force proche dans mon téléphone et onglet quand commencer à changer d'onglet. Est-ce la meilleure façon de communiquer entre les fragments et une aide pour comprendre le problème. Merci ....Fragments analyse des données dans FragmentActivity TabListener

Voici la classe d'interface

public interface FragmentCommunicater { 
    public void getData(String data); 
} 

FragmentActivity Classe

public class Welcome extends FragmentActivity implements TabListener,FragmentCommunicater{ 

    private ActionBar actionbar; 
    private ViewPager viewPager; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_welcome); 

     viewPager = (ViewPager) findViewById(R.id.viewPager); 
     viewPager.setAdapter(new fragAdapter(getSupportFragmentManager())); 
     viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener(){ 

      @Override 
      public void onPageSelected(int arg0) { 
       actionbar.setSelectedNavigationItem(arg0); 
      } 
     }); 

     actionbar = getActionBar(); 
     actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

     ActionBar.Tab dashboard_tab = actionbar.newTab(); 
     dashboard_tab.setText("Home"); 
     dashboard_tab.setTabListener(this); 
     actionbar.addTab(dashboard_tab); 

     ActionBar.Tab addPatient_tab = actionbar.newTab(); 
     addPatient_tab.setText("Add Patient"); 
     addPatient_tab.setTabListener(this); 
     actionbar.addTab(addPatient_tab); 
    } 

    @Override 
    public void onTabSelected(Tab tab, FragmentTransaction ft) { 
     viewPager.setCurrentItem(tab.getPosition()); 
    } 

    @Override 
    public void getData(String data) { 
     FragmentManager fm = getSupportFragmentManager(); 
     ViewPatient vpFrag = (ViewPatient) fm.findFragmentById(R.id.view_patient_fragment); 
     vpFrag.setData(data); 
    } 
} 

class fragAdapter extends FragmentPagerAdapter{ 

    public fragAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int arg0) { 
     Fragment fragment = null; 

     if(arg0 == 0){ 
      fragment = new Dashboard(); 
     } 
     if(arg0 == 1){ 
      fragment = new AddPatient(); 
     }  
     return fragment; 
    } 

    @Override 
    public int getCount() { 
     return 5; 
    } 
} 

Envoi Fragment

public class Dashboard extends Fragment { 

    private Button btn_searchPatient; 
    private FragmentCommunicater fragComm; 

    public Dashboard() { 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_dashboard, container, false);   btn_searchPatient = (Button) view.findViewById(R.id.btn_searchPatient);  

     fragComm = (FragmentCommunicater) getActivity();   
     initializeActions(); 

     return view; 
    } 

    private void initializeActions(){ 

     btn_searchPatient.setOnClickListener(new OnClickListener() {    
      @Override 
      public void onClick(View v) { 

       if(!result.isEmpty()){ 
        fragComm.getData("test parse string")); 
       } 
      } 
     });  
    } 
} 

RECEVOIR Fragment

public class ViewPatientextends Fragment { 

    public ViewPatient() { 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
    Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_view_patient, container, false); 
     return view; 
    } 

    public void setData(String data){ 
     Toast.makeText(getActivity().getApplicationContext(), data, Toast.LENGTH_LONG).show(); 
    } 
} 

Répondre

0

Dans la fonction getData dans FragmentActivity doit changer comme ça,

@Override 
public void getData(String data) { 
    FragmentManager fm = getSupportFragmentManager(); 
    ViewPatient vpFrag = (ViewPatient) fm.findFragmentByTag(R.id.view_patient_fragment); 
    vpFrag.setData(data); 
} 

findFragmentById doit changer pour findFragmentByTag et doivent passer la balise fragment lorsque sa création comme,

En mettant en œuvre une méthode dans FragmentActivity appelée setViewPati
@Override 
public void onAttach(Activity activity) { 
    // TODO Auto-generated method stub 
    super.onAttach(activity); 
    ((Welcome)getActivity()).setViewPatientFragmentTagData(getTag()); 
} 

entFragmentTagData comme,

public void setViewPatientFragmentTag(String tag){ 
    viewPatientFragmentTag = tag; 
} 

avec une chaîne viewPatientFragmentTag variables. Cette méthode fonctionne bien.

Questions connexes