0

i ai 4 fragment dans une activité (MainActivity: ViewPager)la façon d'obtenir la valeur de fragment de données d'entrée avec viewpager

fragment1 = edittext1, fragment2 = edittext2, fragment3 = edittext3 & fragment4 = buttonsave

dans fragment4 il n'y a qu'un bouton de sauvegarde pour récupérer des données à partir de fragments 1,2 et 3 mais quand je clique sur buttonsave, les données de fragment1 est toujours nul

MainActivity:

public class MainActivity extends AppCompatActivity { 

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

    ViewPager viewPager = (ViewPager) findViewById(R.id.pager); 
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
    adapter.addFragment(new FragmentOne(), "FRAG1"); 
    adapter.addFragment(new FragmentTwo(), "FRAG2"); 
    adapter.addFragment(new FragmentThree(), "FRAG3"); 
    adapter.addFragment(new FragmentFour(), "FRAG4"); 
    viewPager.setAdapter(adapter); 

    TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs); 
    tabLayout.setupWithViewPager(viewPager); 
} 

class ViewPagerAdapter extends FragmentPagerAdapter { 
    private final List<Fragment> mFragmentList = new ArrayList<>(); 
    private final List<String> mFragmentTitleList = new ArrayList<>(); 

    public ViewPagerAdapter(FragmentManager manager) { 
     super(manager); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     return mFragmentList.get(position); 
    } 

    @Override 
    public int getCount() { 
     return mFragmentList.size(); 
    } 

    public void addFragment(Fragment fragment, String title) { 
     mFragmentList.add(fragment); 
     mFragmentTitleList.add(title); 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return mFragmentTitleList.get(position); 
    } 
} 

Fragment 1,2 dan 3

public class FragmentOne extends Fragment { 
public FragmentOne() { 
    // Required empty public constructor 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 

    return inflater.inflate(R.layout.fragment_one, container, false); 
} 

}

Fragment4

public class FragmentFour extends Fragment { 

private EditText txt1, txt2, txt3; 
private Button button; 

public FragmentFour() { 
    // Required empty public constructor 
} 

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

    txt1 = (EditText)getActivity().findViewById(R.id.txt1); 
    txt2 = (EditText)getActivity().findViewById(R.id.txt2); 
    txt3 = (EditText)getActivity().findViewById(R.id.txt3); 

    button = (Button)view.findViewById(R.id.button); 
    button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      getData(); 
     } 
    }); 
    return view; 
} 

private void getData() { 
    String fragment1 = txt1.getText().toString(); 
    String fragment2 = txt2.getText().toString(); 
    String fragment3 = txt3.getText().toString(); 
} 

Null problème

données de text1 (fragment) toujours null:

Data from text1 (fragment)always null

Que dois-je faire pour résoudre ce problème?

merci beaucoup ...

+0

Vous pouvez utiliser la variable statique –

+0

Qu'en est-il des données du fragment 2? – AbhayBohra

Répondre

0

viewPager toujours charger 1 pages consécutives de les deux côtés si vous voulez accéder aux données editText Fragment 1 puis ajoutez thi s ligne

viewPager.setOffscreenPageLimit(4); 

ou Utiliser une variable statique

+0

merci l'homme, mon problème résolu avec cette solution ... – youngs

0

Vous devez utiliser Partager préférence pour stocker FragmentOne données, FragmentTwo données, puis récupérer pour FragmentTree sur le bouton Enregistrer

0

Vous pouvez utiliser Arguments pour transmettre des données entre les fragments, par exemple

Bundle bundle = new Bundle(); 
bundle.putString("someEditTextData",someEditTextData); 
SomeFragment fragment = new SomeFragment(); 
fragment.setArguments(bundle); 

et récupérer les données dans quelque chose de fragment nécessaire comme celui-ci

Bundle args = getArguments(); 
    if (args != null) { 
     showReceivedData.setText(args.getString("someEditTextData")); 
    } 
0

vous pouvez utiliser la préférence partagée à cet effet

Créer SharedPreferences

SharedPreferences pref = getApplicationContext().getSharedPreferences("DATA", MODE_PRIVATE); 
Editor editor = pref.edit(); 
editor.putString("EDITEXT1", "string value"); // Saving string data of your editext 
editor.commit(); // commit and save your data in to SharedPreferences 

récupérer maintenant vos données comme ci-dessous le code

SharedPreferences pref = getApplicationContext().getSharedPreferences("DATA", MODE_PRIVATE); 
String email=pref.getString("EDITEXT1", "");  // Saving string data of your editext 
0

Vous pouvez définir un champ d'instance dans votre activité et y accéder jusqu'à la coulée de référence getActivity() à MainActivity dans le fragment.

((MainActivity) getActivity()).filedName.setFragmentOneData(data);