Comment créer une interface pour obtenir des informations à partir d'un Fragment à un Android Activité?
Au cours des derniers jours, j'ai désespérément essayé de construire une application android avec un simple fragment (que j'utilise deux fois). Je veux passer le contenu des fragments EditText-cases pour une nouvelle activité. Je ne peux pas comprendre comment obtenir du contenu à partir de fragments. Ce que j'ai jusqu'à présent est: est-ce
J'ai obtenu mon edit_text_fragment.xml
:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<EditText
android:id="@+id/my_edit_text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="my hint" />
</LinearLayout>
et le correspondant MyEditTextFragment.java
:
public class MyEditTextFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.edit_text_fragment, container, false);
return view;
}
}
Je puis utiliser ce fragment que deux fois dans ma main.xml
comme ceci:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<fragment
android:id="@+id/detailfragment_placeholder"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
class="com.example.fragmenttester5.MyEditTextFragment" />
<fragment
android:id="@+id/detailfragment_placeholder2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
class="com.example.fragmenttester5.MyEditTextFragment" />
<Button
android:id="@+id/submit_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Submit all of it" />
</LinearLayout>
et dans mon MainActivity j'ai branché le bouton pour une nouvelle activité:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button submitButton = (Button) findViewById(R.id.submit_button);
submitButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v){
Intent intent = new Intent(MainActivity.this, OtherActivity.class);
intent.putExtra("result1", "the_result_from_the_first_editText");
intent.putExtra("result2", "the_result_from_the_second_editText");
startActivity(intent);
}
});
}
}
Je pense j'ai maintenant besoin de définir une sorte d'interface dans le Fragment, mais je ne trouve pas comment. J'ai lu quelques exemples et tutoriels (comme cette une), mais ils n'ont pas de sens pour moi. Je ne comprends pas le code donné et je ne comprends pas comment les régler pour mon cas d'utilisation.
Donc ma question; quelqu'un peut-il m'aider à obtenir le contenu du fragment de l'intérieur de l'activité? Les exemples pourraient être très très bienvenues car je suis juste à se taper la tête contre le mur ici..
OriginalL'auteur kramer65 | 2013-10-06
Vous devez vous connecter pour publier un commentaire.
Donc, si vous voulez créer une Interface de parler avec les
Activity
si l'événement qui s'est passé dans laFragment
. Pour ce genre de situations, vous pouvez tout simplement faire une méthode accessible dans leFragment
que leActivity
peuvent appeler. DoncPuis
Cela suppose que vous avez attribué la
Fragment
balises dans votreFragmentTransaction
. Assurez-vous de vérifier la valeur nullFragments
(omis par souci de concision)getFragmentManager().findFragmentByTag
à tous. La mise à jour de la réponse maintenant.Vous êtes génial! Vous avez fait tout mon week-end génial! Merci pour cette! 😀
pouvez-vous répondre à Ce One?
OriginalL'auteur Paul Burke
Vous avez raison, c'est un moyen standard pour transmettre des données à partir d'un Fragment d'une activité.
Fondamentalement, vous définissez un
Listener
interface dont l'Activité met en œuvre, et l'Activité s'inscrit comme un Écouteur avec le Fragment.Voici un exemple simple:
Fragment
Activité
OriginalL'auteur Ridcully
Sur un niveau élevé, il y a deux tâches que vous avez souvent besoin de résoudre avec les Fragments. La première est la communication des données à partir d'une Activité à un Fragment. La deuxième est de la communication des données à partir d'un Fragment d'une Activité.
Une Activité connaît des Fragments qu'il contient, car il les crée, il est donc facile de communiquer de cette façon et appeler des méthodes sur le Fragment de lui-même. Mais l'inverse n'est pas vrai; Fragments peut être attaché à n'importe quel nombre aléatoire d'Activités, de sorte qu'il ne sait rien au sujet de ses parents.
La solution est de mettre en place une interface de l'Activité met en œuvre et le Fragment sait comment communiquer avec. De cette façon, votre Fragment a quelque chose, il sait comment parler avec. Il y a des exemples de code pour comment le faire ici: http://developer.android.com/guide/components/fragments.html#CommunicatingWithActivity
(En particulier, consultez la section "Création de rappels d'événements à l'activité" exemples de code).
Vous avez réellement n'avez pas besoin d'une interface à tous ici. L'action se passe dans le
Activity
, pas laFragment
(le bouton n'est pas dans les fragments). Voir ma réponse.OriginalL'auteur Daniel Lew
Activité sera reçu les données de updateDetail() la méthode du Fragment
OriginalL'auteur Albert Nguyen