Android Deux Fragments de la Même Activité
Je suis conscient du fait que le post suivant:
À l'aide de Plusieurs Fragments dans une seule activité
Ce que je suis à la recherche d'une réponse spécifique à un problème spécifique. Le résultat du code suivant est un vide FragmentActivity. Ce qui me manque dans mon code suivant pour obtenir de rendre une activité avec deux fragments. L'un est une liste vide fragment, l'autre est un fragment qui contient une zone de saisie et un bouton dans une mise en page horizontale, (cette disposition peut être trouvé à http://developer.android.com/training/basics/firstapp/starting-activity.html) que je veux être placés absolument au bas de l'écran avec une hauteur fixe de l'ordre de 25 dip.
Manifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.my.package"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.my.package.Application"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Mon activité principale et de ses associés application.xml fichier.
package com.my.package;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentTransaction;
public class Application
extends FragmentActivity
implements MessageListViewFragment.OnLineSelectedListener,
SendMessageFragment.OnSendButtonPressed {
MessageListViewFragment mMessageListFragment;
SendMessageFragment mSendMessageFragment;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.application);
mMessageListFragment = new MessageListViewFragment();
mSendMessageFragment = new SendMessageFragment();
FragmentTransaction transaction =
getSupportFragmentManager().beginTransaction();
transaction.add(R.id.message_fragment, mMessageListFragment);
transaction.add(R.id.send_fragment, mSendMessageFragment);
transaction.commit();
}
@Override
public void onListItemSelected(int position) {
//TODO Auto-generated method stub
}
@Override
public void onSendButtonPressed() {
//TODO Auto-generated method stub
}
}
Mise en page:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:baselineAligned="false"
android:orientation="vertical" >
<fragment
android:id="@+id/message_fragment"
android:name="com.example.android.fragments.MessageListViewFragment"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="top" />
<fragment
android:id="@+id/send_fragment"
android:name="com.example.android.fragments.SendMessageFragment"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="bottom" />
</LinearLayout>
Et maintenant pour les deux fragments et leurs associés des fichiers xml:
Premier Fragment (liste fragment en haut)
package com.my.package;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class MessageListViewFragment extends ListFragment {
OnLineSelectedListener mCallback;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
//This makes sure that the container activity has implemented
//the callback interface. If not, it throws an exception
try {
mCallback = (OnLineSelectedListener)activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement OnLineSelectedListener");
}
}
//Container Activity must implement this interface
public interface OnLineSelectedListener {
public void onListItemSelected(int position);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.list_fragment, null);
}
}
Mise en page:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
deuxième fragment (en bas),
package com.my.package;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class SendMessageFragment extends Fragment {
OnSendButtonPressed mCallback;
//Container Activity must implement this interface
public interface OnSendButtonPressed {
public void onSendButtonPressed();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.input_fragment, null);
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
//This makes sure that the container activity has implemented
//the callback interface. If not, it throws an exception
try {
mCallback = (OnSendButtonPressed)activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement OnHeadlineSelectedListener");
}
}
}
Mise en page:
<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="horizontal">
<EditText android:id="@+id/edit_message"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:hint="@string/edit_message" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_send" />
</LinearLayout>
- eh bien, vous avez déjà codé en dur les fragments dans votre xml de sorte que vous ne souhaitez pas ajouter de nouveau dans votre code
- Si je les supprime à partir du XML que ça va marcher?
- garder le xml, il suffit de retirer le code et voir ce qui se passe
- Toujours pas de chance, je pense que cela a à voir avec ce que je fais avec les fragments de modèles. Peut-être remplir parent, je ne sais pas quoi faire avec eux.
Vous devez vous connecter pour publier un commentaire.
Procédez de la manière suivante:
Fragment
àFrameLayout
l'activité principale XML, pour les deux.layout_width
defill_parent
àmatch_parent
, pour les deuxFrameLayout
dans le fichier XML principal, (ceux créés à l'étape 1).layout_height
defill_parent
àwrap_content
, pour les deuxFrameLayout
dans le fichier XML principal, (ceux créés à l'étape 1).FrameLayout
àListView
dans la Liste Fragment XML parce que c'est une Liste de.LisView
à@android:id/list
, car il est nécessaire pour laListFragment
.Alors laissez-moi savoir, Merci.
Modifier ces:
return inflater.inflate(R.layout.list_fragment, null);
àreturn inflater.inflate(R.layout.list_fragment, container, false);
.return inflater.inflate(R.layout.input_fragment, null);
àreturn inflater.inflate(R.layout.input_fragment, container, false);
Edit:
Faire votre activité principale fichier XML comme ceci:
J'ai pris la
android:name"..."
parce que je ne sais pas ce que c'est ni en mesure de trouver ce que c'est, si vous savez ce qu'il fait pour vous, il suffit d'ajouter le dos, devrait être d'accord.