die übergabe von Daten zu einem anderen fragment durch swipe-view mit tab, android studio,nicht Knopf
Ist es möglich, einen pass Daten von fragment zu fragment durch streichen?
Gibt es viele Artikel, die uns lehrt, wie wir übergeben die Daten von fragment zu fragment, aber die meisten der Artikel oder Fragen hatte implementiert OnClickListener in Ihre erste fragment, die verwendet, um Wert zu einem anderen fragment.
Aber mein Fall ist das übergeben der Daten aus zwei Fragmenten, ohne dass eine Taste klicken und schließlich speichern Sie Sie in unterschiedliche Tabellen durch klicken auf die Schaltfläche in der letzten fragment. Was kann ich tun, um dies zu erreichen??
Den Fluss ist Information
>> WorkForce
>>WorkDetailsTable
und speichern Sie Sie in unterschiedliche Tabellen durch eine Taste klicken.
Ich habe versucht, es herauszufinden, aber ich bekomme NULL-Wert in SQLite. Ich glaube, ich habe verpassen eine Menge, aber haben keine Ahnung. BITTE helft mir...ich habe am stuck hier für mehr als zwei Tage...Danke
Tab.java
public class Tab extends ActionBarActivity implements ActionBar.TabListener {
ViewPager Tab;
TabPagerAdapter TabAdapter;
ActionBar actionBar;
public static String name = null;
public static String subContractors = null;
//will be used for data communication
public static Force force_bean;;
public static Info info_bean;
public static Force getForce(){
return force_bean;
}
public static void setForce(Force force){
force_bean=force;
}
public static Info getInfo(){
return info_bean;
}
public static void setInfo(Info info){
info_bean=info;
}
final Activity mActivity = (Activity) this;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tab1);
info_bean = new Info();
force_bean = new Force();
TabAdapter = new TabPagerAdapter(getSupportFragmentManager());
Tab = (ViewPager) findViewById(R.id.pager);
Tab.setOnPageChangeListener(
new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
actionBar = ((AppCompatActivity) mActivity).getSupportActionBar();
actionBar.setSelectedNavigationItem(position);
}
});
Tab.setAdapter(TabAdapter);
actionBar = ((AppCompatActivity) mActivity).getSupportActionBar();
//Enable Tabs on Action Bar
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
//Add New Tabs
actionBar.addTab(actionBar.newTab().setText("Information").setTabListener(this));
actionBar.addTab(actionBar.newTab().setText("Work Force").setTabListener(this));
actionBar.addTab(actionBar.newTab().setText("Work Details").setTabListener(this));
}
@Override
public void onTabSelected(ActionBar.Tab tab, android.support.v4.app.FragmentTransaction ft) {
}
@Override
public void onTabUnselected(ActionBar.Tab tab, android.support.v4.app.FragmentTransaction ft) {
}
@Override
public void onTabReselected(ActionBar.Tab tab, android.support.v4.app.FragmentTransaction ft) {
}
}
TabPagerAdapter.java
public class TabPagerAdapter extends FragmentStatePagerAdapter {
public TabPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int i) {
switch (i) {
case 0:
return Information.newInstance("name");
case 1:
return WorkForce.newInstance("SubCon");
case 2:
return WorkDetailsTable.newInstance();
}
return null ;
}
@Override
public int getCount() {
return 3; //No of Tabs you can give your number of tabs
}
Informmation.java
public class Information extends Fragment implements View.OnClickListener {
private Spinner spinner, spinner2, spinner3;
private static String a;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
View info = inflater.inflate(R.layout.information, container, false);
dialog = new DateDialog();
spinner = (Spinner)info.findViewById(R.id.spinner);
addItemsOnSpinner();
a= spinner.getSelectedItem().toString();
return info;
}
public static Information newInstance(String a)
{
Information fragment=new Information();
Bundle bundle=new Bundle();
bundle.putString("a",a);
fragment.setArguments(bundle);
return fragment;
}
public void addItemsOnSpinner() {
List<String> list = new ArrayList<String>();
list.add("1 ");
list.add("2");
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_dropdown_item, list);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
}
WorkForce.java
public class WorkForce extends Fragment {
private static EditText txt1;
private static String subCon;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
View work = inflater.inflate(R.layout.workforce, container, false);
txt1 = (EditText) work.findViewById(R.id.editText);
subCon = txt1.getText().toString();
return work;
}
public static WorkForce newInstance(String subCon) {
WorkForce f = new WorkForce();
Bundle bundle = new Bundle();
bundle.putString("subCon", subCon);
f.setArguments(bundle);
return f;
}
}
WorkDetails.java
private com.example.project.project.API.InfoAPI ts;
private com.example.project.project.API.WorkDetailsAPI WD;
private com.example.project.project.API.WorkForceAPI WF;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
View workDetails = inflater.inflate(R.layout.tableworkdetails, container, false);
getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
spinnerTra = (Spinner) workDetails.findViewById(R.id.spinner6);
addItemsOnSpinner();
Button btn1 = (Button)workDetails.findViewById(R.id.button2);
WD = new com.example.project.project.API.WorkDetailsAPI(getActivity());
ts = new com.example.project.project.API.InfoAPI(getActivity());
WF = new com.example.project.project.API.WorkForceAPI(getActivity());
a1 = spinnerTra.getSelectedItem().toString();
Bundle bundle = new Bundle();
final String name = bundle.getString("a");
final String subContractors = bundle.getString("subCon");
btn1.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
add(name, subContractors);
}
});
return workDetails;
}
public void add(String name,String subContractors)
{
Toast.makeText(getActivity(),+name+subContractors, Toast.LENGTH_SHORT).show();
ts.insertTimeSheet(name);
WF.insertWorkForce(subContractors);
}
Hinweis: in Meinem Fall ist das übergeben der Daten aus zwei Fragmenten, ohne dass eine Taste klicken und schließlich speichern Sie Sie in unterschiedliche Tabellen durch klicken auf die Schaltfläche in der letzten fragment.
- ich bekomme keine Daten übergeben, die auf Ihrem code..von Informationen an Belegschaft, welche Daten übergeben??
- hi @calvinfly , was soll ich schreiben, um zu übergeben, den Wert von Informationen an die Belegschaft? Sorry, ich bin wirklich sehr neu in android
- Ich spreche von teamtreehouse.com/community/...
- was ist Ihr Ziel? In
Information
fragment, Benutzereingaben gleichen Daten, und speichern Sie es, dannWorkForce
dynamisch ändern base auf user ' s verpasst? - Die Schaltfläche in der letzten fragment die Daten speichern von Informationen und der Belegschaft. In der information gibt es einen spinner, während die Belegschaft hat ein editText
- versuchen onPageSwipeListener für die übertragung von Daten-fragment zu fragment
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn ich verstehe dein problem korrekt, Sie sind im wesentlichen die Umsetzung von etwas, das ein bisschen wie ein "Wizard", in dem jeder Schritt übergibt die Informationen an den nächsten Schritt, wie Sie swipe zwischen Registerkarten, oder wählen Sie Sie aus.
So, in Wirklichkeit dein problem ist, wie man die Informationen aus einem fragment, wenn es deaktiviert ist und in einem fragment, wenn ausgewählt.
Auf der einfachsten Ebene, würde ich vorschlagen, Ihre Aktivität hält die "master" - Kopie alle Informationen und gibt es in/nimmt es von jedem fragment in der tab-pager-adapter.
Würden Sie brauchen eine Art von "Domain" - Objekt, halten alle Informationen, die Sie benötigen, zu sammeln. Jeder Reiter würde nur zu aktualisieren, die bits von Informationen, die es interessiert..
Fügen Sie eine Instanz dieses zu halten, die master-Kopie "Registerkarte" Aktivität:
Ich würde dann vorschlagen, eine einfache Schnittstelle, die jeder der Ihre "tab" - Fragmente implementieren; so etwas wie:
Jede Ihrer tab-Fragmente würde dieses interface implementieren, das aktualisieren des WorkData wie nötig.
Dann müssen Sie nur fügen Sie den code zu übergeben, die Daten nach hinten und vorne.. in Ihrem "Registerkarte" Aktivität, die aussieht wie...
Eine wichtige Sache zu beachten hier ist, dass Ihr TabPagerAdapter wird, erstellen Sie ein neues fragment jedes mal, wenn Sie getItem () aufrufen.. das bedeutet, dass wir nie alle updates, denn jedes mal, wenn wir versuchen, den fragment-gibt es ein neues, leeres fragment. Wir müssen dies ändern, so dass die Fragmente werden noch erstellt, wenn Sie zuerst gefragt, aber nur einmal erstellt, so dass wir nicht halten, werfen unsere Arbeit.
Hoffe, das hilft. Viel Glück 🙂
Obwohl C James bietet gute Tipps, um Ihre Probleme zu lösen, würde ich Ihnen gern vorstellen einen anderen Weg, ohne mit der Implementierung von Schnittstellen. Bitte überprüfen Sie den link unten aus. Wenn Sie verwenden einen Ereignis-bus-Bibliothek eine solche http://square.github.io/otto/, können Sie ganz einfach übertragen Daten, die Sie freigeben möchten, der unter die Fragmente und auch Aktivitäten. Darüber hinaus können Sie reduzieren die Menge an code-Zeile, da es nur erfordert Absender(VERLAG), Empfänger(Subscriber), während die Umsetzung von Schnittstellen erfordert zusätzliche Zeilen code.
Hier ist ein tutorial von Otto library.
http://www.vogella.com/tutorials/JavaLibrary-EventBusOtto/article.html
Hoffe es hilft 🙂
Ich würde mehr gehen, das Observer-Muster Weg.
Die einzelnen Fragmente änderungen ein POJO mit gerendert wird in Ihre Bruchstücke in irgendeiner Weise. Sie haben einfach zu Beobachten, das pojo in Ihre Fragmente. Ändern Fragmente informieren Interessierte Beobachter, ohne Sie zu kennen.
Ich glaube, dass das eine viel sauberere Weg, um dies zu implementieren.
Fragment-A -> PojoInstance.setXY("foo");
Fragment A -> informiert den Beobachter, welche e.b Informiert Fragment B:
Fragment B die Veränderung sehen, die tru den Betrachter.
Weil ViewPagers oder andere Komponenten werden Fragmente das ist ein Weg, um Informationen in bereits erstellten Fragmente, auch wenn Ihr nicht gesehen werden.
Könnte man auch versuchen, ein EventBus wo Sie gehen auf die POJO-um.
Zur übertragung von Daten von einem Ausschnitt zu einem anderen fragment, wenn die Abtastung durchgeführt wird ,Erstens, sollten Sie sich den Blick auf die jedem fragment.hier ist der Beispielcode, der Ihnen helfen kann, ein bisschen.
schreiben Sie diesen code in Tätigkeit:
und erstellen Sie eine FragmentPagerAdapter als:
In Fragmente fügen Sie die getmyview() wird wieder der Blick auf das fragment als:
{
return myview;//myview ist fragment-Ansicht, die Sie zurück in die oncreateview-Methode
}
Hinweis: Viewpager ausführen onpagescroll ersten und bekommen die position 0,1 und wenn Sie Blättern ,Ansichten an position 1,2 ausgeführt wird, und-Seite ausgewählt 0 ausgeführt wird.
Für tabselections: Tabunselected,Tabselected Registerkarte reselected, ist die Reihenfolge der Ausführung.
so schreiben sich entsprechend in die jeweiligen Positionen der Fragmente.
Hoffe, dies hilft Ihnen.