Holen Sie edittext Wert von fragment
Ich bin mit Fragmenten habe ich ein edittext in fragment-und ich möchte Wert in der Haupt-Aktivität.
Dies ist mein fragment-layout
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#878787" >
<TextView android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="dfgdfgdf"
android:textSize="20dp"
android:layout_centerInParent="true"
android:id="@+id/user_name"/>
<EditText
android:id="@+id/message"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<Button
android:text="Gönder"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:onClick="getFromUser"
android:layout_marginTop="40dp"
/>
</RelativeLayout>
Ich bin laden fragment mit dieser Funktion:
public void startChat(JsonObject user) {
FrameLayout layout = (FrameLayout)findViewById(R.id.container);
layout.setVisibility(View.VISIBLE);
Bundle bundle = new Bundle();
bundle.putString("name", user.get("name").getAsString());
sendTo=user.get("username").getAsString();
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
ConversationFragment conv = new ConversationFragment();
conv.setArguments(bundle);
fragmentTransaction.add(R.id.container, conv);
fragmentTransaction.commit();
viewPager.setVisibility(View.GONE);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
actionBar.setDisplayHomeAsUpEnabled(true);
}
Und das ist mein fragment-Klasse
public class ConversationFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
String name = getArguments().getString("name");
View rootView = inflater.inflate(R.layout.fragment_conversation, container, false);
TextView username=(TextView)rootView.findViewById(R.id.user_name);
username.setText(name);
return rootView;
}
}
Wie Sie sehen können, wenn Sie die Taste drücken, die Haupt-Aktivität führt "getFromUser" - Funktion.Ich will edittext Wert in diese Funktion.Wie kann ich dies tun ?
"Haupttätigkeit "läuft getFromUser" Funktion" macht keinen Sinn, wenn Sie sagen, dass Ihr das fragment-layout. Du meinst getFromUser ist aufgerufen, in das fragment?
ja,ich meine, wenn Benutzer drücken Sie die Taste,getFromUser-Funktion ausgeführt wird,und diese Funktion erklärt in der mainactivity.
Und das ist genau das, was nicht funktioniert, nehme ich an. Die Methode wird nie aufgerufen, auf den button klicken ...
können Sie Ihre
Hier voll mainactivity:pastebin.com/WQHgeCdZ
ja,ich meine, wenn Benutzer drücken Sie die Taste,getFromUser-Funktion ausgeführt wird,und diese Funktion erklärt in der mainactivity.
Und das ist genau das, was nicht funktioniert, nehme ich an. Die Methode wird nie aufgerufen, auf den button klicken ...
können Sie Ihre
mainactivity
Hier voll mainactivity:pastebin.com/WQHgeCdZ
InformationsquelleAutor Tolgay Toklar | 2014-08-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist immer das gleiche Verfahren für diese Dinge. Sie können nicht auf ein fragment Ansichten einfach so. Benötigen Sie eine callback-Methode.
Fügen Sie diesen code ConversationFragment:
Machen Sie Ihre MainActivity implementieren diese Schnittstelle. Ersetzen getFromUser() innen MainActivity mit:
Getan.
Bearbeiten:
Tatsächlich, mit dem XML-Attribut "onClick" ist derzeit verbuggt (siehe onClick innerhalb fragment genannt, die auf Aktivität): links der Aktivität anstelle der fragment. Sie müssen das Klick-listener programmgesteuert, um sicherzustellen, dass der code nicht brechen irgendwann in der Zukunft. So geben Sie dem button eine ID innerhalb der XML (z.B. get_from_user) und fügen Sie diesen code onCreateView innen ConversationFragment:
Verwendung dieser Codes stark entkoppelt die Aktivität und das fragment von einander.
Wie ich schon sagte, stellen Sie Ihre Aktivität realisieren OnGetFromUserClickListener.
Ich verstehe nicht, wie kann ich implete dieser code in der main-activity.Können Sie sich dies anschauen ? pastebin.com/WQHgeCdZ
Tun Sie einfach alles, was oben eins nach dem anderen? Don nicht vergessen, hinzuzufügen ", ConversationFragment.OnGetFromUserClickListener" hinter "ActionBar implementiert.TabListener".
Tun Sie es, wie Sie bereits sind (mit setArguments und getArguments) ist die beste Praxis. In jenen Fällen, wo Sie wirklich haben, um zu aktualisieren, ein fragment, wenn es schon gezeigt, man könnte getSupportFragmentManager().findFragmentById(...) oder speichern Sie Ihre fragment in eine variable. Es gibt genug Informationen dazu gibt es hier auf Stack Overflow.
InformationsquelleAutor 0101100101
Gibt es Zwei Ansätze
In Ihrem fragment, die Sie anrufen können, getActivity(). Dies wird Ihnen Zugang zu den Aktivitäten, erstellt das fragment. Von dort aus kann man offensichtlich rufen Sie irgendeine Art von accessor-Methoden, die in der Aktivität.
Erstellung Einer Schnittstelle. Implementieren ist auf einem Container-Aktivität. Übergeben Sie den Bezug auf Fragment. Aufruf der interface-Methode von Fragment.
Meine Antwort ist eigentlich ein Beispiel für Nummer 2.
Erklärt, mit Beispiel
dies sollte die akzeptierte Antwort
InformationsquelleAutor Hardik Trivedi
Ich dieses problem gelöst.
Jetzt kann ich edittext Wert von fragment.
Aber es funktioniert,du meinst dieser code wird nicht funktionieren in der Zukunft ?
Nicht sicher, aber es könnte passieren. In jedem Fall, den code, den Sie zur Verfügung gestellt arbeitet, aber es ist kein sauberer code (siehe diese zu beantworten und Kommentare zu How to handle button-Klicks über die xml-onClick innerhalb Fragmente). Dies scheint in der Tat ein ganz heikles Thema.
Welchen Schaden würde möglicherweise auftreten, Sie denken, wenn ich den code habe ich oben gegeben? du lässt mich vermuten,
Am wichtigsten ist, verlieren Sie den Vorteil der Fragmente als austauschbar (siehe developer.android.com/guide/components/fragments.html für weitere Informationen). Neben Google könnte sich entscheiden, dies zu beheben "Fehler" und onClick link, um die zugrunde liegende fragment anstelle des Containers Aktivität. In diesem Fall müssen Sie zu wechseln, meine Lösung ohne die Bearbeiten sowieso.
InformationsquelleAutor Tolgay Toklar