Ich weiß nicht, die Art der Informationen, die Sie validieren mögen erhalten, aber Sie können eine Singleton-Klasse verwenden, die die Informationen von Fragmente enthält 1 und Fragment 2, und wenn Sie Ihr Formular senden möchten, können Sie einfach die Informationen aus dieser Klasse erhalten und validieren.
EDIT:
Können sagen, wir haben fragmenta, FragmentB und ein Singleton DataBuilder, die die Daten aus den beiden Fragmente enthält. In FragmentA können Sie alle Ihre Daten im DataBuilder speichern und den Benutzer zu FragmentB navigieren. Dann müssen Sie die Daten erst validieren, bevor Sie sie übergeben. Und wenn die Validierung für FragmentA falsch ist, navigieren Sie einfach zurück zum FragmentA und zeigen Sie eine Nachricht an.
fragmenta:
package aero.djetops;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
public class FragmentA extends Fragment{
private EditText firstInput;
private EditText secondInput;
private EditText thirdInput;
private Button bContinue;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragmentA_layout, container, false);
firstInput = (EditText) rootView.findViewById(R.id.first_input);
secondInput = (EditText) rootView.findViewById(R.id.second_input);
thirdInput = (EditText) rootView.findViewById(R.id.third_input);
// populate the inputs with the data from DataBuilder
firstInput.setText(DataBuilder.getInstance().getFragmentA_firstInputData());
secondInput.setText(DataBuilder.getInstance().getFragmentA_secondInputData());
thirdInput.setText(DataBuilder.getInstance().getFragmentA_thirdInputData());
bContinue.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DataBuilder.getInstance().setFragmentA_firstInputData(firstInput.getText().toString());
DataBuilder.getInstance().setFragmentA_secondInputData(secondInput.getText().toString());
DataBuilder.getInstance().setFragmentB_thirdInputData(thirdInput.getText().toString());
FragmentB fragmentB = new FragmentB();
getFragmentManager().beginTransaction().replace(R.id.content_frame, fragmentB)
.addToBackStack(null).commit();
}
});
return rootView;
}
}
FragmentB:
package aero.djetops;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
public class FragmentB extends Fragment{
private EditText firstInput;
private EditText secondInput;
private EditText thirdInput;
private Button bSubmit;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragmentB_layout, container, false);
firstInput = (EditText) rootView.findViewById(R.id.first_input);
secondInput = (EditText) rootView.findViewById(R.id.second_input);
thirdInput = (EditText) rootView.findViewById(R.id.third_input);
// populate the inputs with the data from DataBuilder
firstInput.setText(DataBuilder.getInstance().getFragmentB_firstInputData());
secondInput.setText(DataBuilder.getInstance().getFragmentB_secondInputData());
thirdInput.setText(DataBuilder.getInstance().getFragmentB_thirdInputData());
bSubmit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DataBuilder.getInstance().setFragmentB_firstInputData(firstInput.getText().toString());
DataBuilder.getInstance().setFragmentB_secondInputData(secondInput.getText().toString());
DataBuilder.getInstance().setFragmentB_thirdInputData(thirdInput.getText().toString());
if(validateDataFragmentA()) {
showErrorMessage();
FragmentA fragmentA = new FragmentA();
getFragmentManager().beginTransaction().replace(R.id.content_frame, fragmentA)
.addToBackStack(null).commit();
return;
} else if(validateDataFragmentB()) {
showErrorMessage();
return;
}
// everything is ok
// submit data here
}
});
return rootView;
}
}
DataBuilder:
package aero.djetops;
public class DataBuilder {
private static DataBuilder ourInstance = new DataBuilder();
public static DataBuilder getInstance() {
return ourInstance;
}
// fragment A
private String fragmentA_firstInputData;
private String fragmentA_secondInputData;
private String fragmentA_thirdInputData;
// fragment B
private String fragmentB_firstInputData;
private String fragmentB_secondInputData;
private String fragmentB_thirdInputData;
private DataBuilder() {
fragmentA_firstInputData = "";
fragmentA_secondInputData = "";
fragmentA_thirdInputData = "";
fragmentB_firstInputData = "";
fragmentB_secondInputData = "";
fragmentB_thirdInputData = "";
}
/**
* Clear the data in the builder
*/
public void clearInputData() {
fragmentA_firstInputData = "";
fragmentA_secondInputData = "";
fragmentA_thirdInputData = "";
fragmentB_firstInputData = "";
fragmentB_secondInputData = "";
fragmentB_thirdInputData = "";
}
// GETTERS and SETTERS
public String getFragmentA_firstInputData() {
return fragmentA_firstInputData;
}
public void setFragmentA_firstInputData(String fragmentA_firstInputData) {
this.fragmentA_firstInputData = fragmentA_firstInputData;
}
public String getFragmentA_secondInputData() {
return fragmentA_secondInputData;
}
public void setFragmentA_secondInputData(String fragmentA_secondInputData) {
this.fragmentA_secondInputData = fragmentA_secondInputData;
}
public String getFragmentA_thirdInputData() {
return fragmentA_thirdInputData;
}
public void setFragmentA_thirdInputData(String fragmentA_thirdInputData) {
this.fragmentA_thirdInputData = fragmentA_thirdInputData;
}
public String getFragmentB_firstInputData() {
return fragmentB_firstInputData;
}
public void setFragmentB_firstInputData(String fragmentB_firstInputData) {
this.fragmentB_firstInputData = fragmentB_firstInputData;
}
public String getFragmentB_secondInputData() {
return fragmentB_secondInputData;
}
public void setFragmentB_secondInputData(String fragmentB_secondInputData) {
this.fragmentB_secondInputData = fragmentB_secondInputData;
}
public String getFragmentB_thirdInputData() {
return fragmentB_thirdInputData;
}
public void setFragmentB_thirdInputData(String fragmentB_thirdInputData) {
this.fragmentB_thirdInputData = fragmentB_thirdInputData;
}
}
Danke für die Antwort. Willst du auf jedes Fragment validieren, wenn du zum nächsten Fragment gehst? .. aber ich validiere die frag1 und frag2 Details nur in Fragment 2. wenn irgendwas falsch ist 1 fragment2, kann ich dort selbst eine fehlermeldung anzeigen (fragment2) .. wenn irgendwas in fragment 1 falsch ist, sollte ich nach farg1 gehen und die fehlermeldung auf bestimmten feldern zeigen. hier zeigt es nicht. – saravanan
@saravanan Ja, Sie müssen nur Werte für dieses bestimmte Fragment validieren. Der Code, den ich gepostet habe, funktioniert perfekt für diesen Zweck. –
ok danke. aber der Benutzer kann die Fragmente sequentiell durch vorwärts und rückwärts besuchen. es kann den Benutzer jedes Mal irritieren, wenn er die Felder bestätigt. als meine Anforderung ist, fragment1 und fragment 2 Werte nur in Fragment 2 einzureichen ... gibt es einen Weg? .. das Problem liegt nach dem erneuten Laden von fragment1, ich kann setError nicht auf bestimmte Felder setzen. wie man fragment1 einfach aufruft, ohne es neu zu laden. pls – saravanan