tutorial - use a fragment android studio



Android zwei Fragmente in derselben Aktivität (1)

Ich kenne den folgenden Beitrag: Verwenden mehrerer Fragmente in einer einzelnen Aktivität

Was ich suche, ist eine spezifische Antwort auf ein bestimmtes Problem. Das Ergebnis des folgenden Codes ist eine leere FragmentActivity. Was fehlt mir in meinem folgenden Code, um eine Aktivität mit zwei Fragmenten zu rendern. Eines ist ein leeres Listenfragment, das andere ist ein Fragment, das ein Eingabefeld und eine Schaltfläche in einem horizontalen Layout enthält (dieses Layout finden Sie unter http://developer.android.com/training/basics/firstapp/starting- activity.html ), dass ich mit einer festen Höhe von etwa 25 Dip absolut am unteren Bildschirmrand platziert werden soll.

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>

Meine Hauptaktivität und die zugehörige Datei application.xml.

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

    }
}

Layout:

<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>

Und nun zu den beiden Fragmenten und den zugehörigen XML-Dateien: Erstes Fragment (Fragment oben)

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);
    }
}

Layout:

<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" />

zweites Fragment (unten)

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");
        }
    }
}

Layout:

<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>

Mach Folgendes:

  1. Ändern Sie Fragment in FrameLayout in der Hauptaktivität XML für beide.
  2. Ändern Sie layout_width von fill_parent zu match_parent für beide FrameLayout in der XML- FrameLayout (die in Schritt 1 erstellten).
  3. Ändern Sie layout_height von fill_parent zu wrap_content für FrameLayout in der XML- FrameLayout (die in Schritt 1 erstellten).
  4. Ändern Sie FrameLayout in ListView in dem List Fragment XML, da es eine Liste ist.
  5. Ändern Sie die ID dieses LisView in @android:id/list , da sie für das ListFragment benötigt ListFragment .

Dann lass es mich wissen, Prost.

Editieren, auch diese:

  1. Änderung return inflater.inflate(R.layout.list_fragment, null); return inflater.inflate(R.layout.list_fragment, container, false); .
  2. Änderung return inflater.inflate(R.layout.input_fragment, null); return inflater.inflate(R.layout.input_fragment, container, false);

Bearbeiten:

Machen Sie Ihre Hauptaktivitäts-XML-Datei wie folgt:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <FrameLayout
        android:id="@+id/message_fragment"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <FrameLayout
        android:id="@+id/send_fragment"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true" />

</RelativeLayout>

Ich nahm den android:name"..." weil ich nicht weiß, was das ist und nicht in der Lage, herauszufinden, was es ist, wenn Sie wissen, was es sicher ist, fügen Sie es einfach zurück, sollte in Ordnung sein.





android-fragments