0

私は Fragments を使い始めており、API ガイドのように実行しましたが...もちろん簡単すぎます ;) アプリを起動するとクラッシュします。いくつかの調査の後、この投稿Android fragment is not workingが見つかりまし た。Stephen Wylie の応答は Ali の問題を修正しているようですが、.. わかりません! FrameLayout はどこに配置すればよいですか? 「where_i_want_my_fragment」ID... 欲しいものなんですよね?最後に、Javaコードをどこに置くべきですか? 私のアクティビティ(ちなみに2つのフラグメントを表示しています)。

ありがとう !

ニコ

編集:私がデザインに何を望んでいるのか、あなたがよりよく理解できると思います。左側に文字列のリストを表示するリストフラグメントが必要で、右側にはリストで選択された文字列に関する情報を表示するフラグメントが必要です。そして、アプリの右側を指の動きでスワイプできるようにしたいです(フラグメントをスワイプする方が良いかどうかはわかりません..同じレイアウトですが、異なるデータで満たされています)

なぜ何もしないのか本当にわからないので、コードを投稿するだけです。これは私の activity_main.xml です

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:baselineAligned="false"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

<FrameLayout  xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/list_frag"
    android:name="main.courante.c.DateListFragment"
    android:layout_width="fill_parent"
    android:layout_height="match_parent" >
</FrameLayout>

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/fiche_frag"
    android:name="main.courante.c.fiche_frag"
    android:layout_weight="2"
    android:layout_width="0dp"
    android:layout_height="match_parent" >
</FrameLayout>

</LinearLayout>

これが私の主な活動です: public class MainActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    DateListFragment fragment = new DateListFragment();
    getFragmentManager().beginTransaction().add(R.id.list_frag, fragment).commit();
    fiche_freg frag2 = new fiche_frag();
    getFragmentManager().beginTransaction().add(R.id.fiche_frag,frag2).commit();

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}

これがDateListFragmentです(自動生成されるためonCreateViewはありません)

public class DateListFragment extends ListFragment {
private int mposition = 1;
private String[] mListItem = new String[] {
        "Lundi 9 Juilllet",
        "Mardi 10 Juillet",
        "Mercredi maintenant"
};
@Override
public void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);

    this.setListAdapter(new ArrayAdapter<String>
                     (this.getActivity(),R.layout.frag_list_view ,mListItem));
    this.getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
}

ここに fiche_frag があります: public class fiche_frag extends Fragment {

@Override
public void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    return inflater.inflate(R.layout.checks_matin,container,false);
}

R.layout.checks_matin は単独で正常に動作します。

お世話になりましたこと、重ねてお礼申し上げます。私は Android 環境の初心者であり、UI のすべての概念を一度に理解するのは難しいと思います... !!

4

1 に答える 1

1

あなたは基本を理解しています。はFrameLayout、フラグメントを移動したい場所に移動します。以前は画面全体が 1 つだった場所でそれを行い、FrameLayout最大 5 つの異なるフラグメントをその内外に入れ替えました。

同時に表示したい 2 つの Fragment がある場合、メイン レイアウトを 2 つFrameLayoutの で作成できます。ただし、これは、常に両方が存在することにロックされていることを意味します (または、一方を削除すると空のスペースになります。

同時に画面に表示する必要のない 2 つのフラグメントが必要な場合は、1 つのフラグメントを使用してFrameLayout、必要に応じてフラグメントを交換するコードを記述します。

フラグメントをインスタンス化するコードは、常に制御アクティビティにある必要があります (動的な場合)。

コードとより具体的な問題がなければ、上記が私があなたに与えることができる最良の答えです.

編集

2 つのフラグメントを並べて配置するメイン レイアウトの例:

<?xml version="1.0" encoding="utf-8"?>
...
    <LinearLayout
        android:id="@+id/frames"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_above="@id/hline1"
        android:layout_below="@id/horizontalline"
        android:orientation="horizontal" >
        <FrameLayout
            android:id="@+id/leftpane"
            android:layout_width="0px"
            android:layout_height="match_parent"
            android:layout_weight=".4" />
        <FrameLayout
            android:id="@+id/rightpane"
            android:layout_width="0px"
            android:layout_height="match_parent"
            android:layout_weight="1" >
        </FrameLayout>
    </LinearLayout>
...

フレームレイアウトの 1 つにフラグメントを追加するには:

FragmentClass fragment = new FragmentClass();
getFragmentManager().beginTransaction().add(R.id.leftpane, fragment).commit();

フレームレイアウトの 1 つ (左側のペインなど) でフラグメントを交換したい場合は、次のように行うことができます。

FragmentClass fragment = new FragmentClass();
getFragmentManager().beginTransaction().replace(R.id.leftpane, fragment).commit();

XML からインスタンス化することを提案したのは、2 つのフラグメントがあり、変更を加えないように思えたからです。それらを交換する場合は、それぞれにタグを追加して、再度表示したい場合に再度見つけられるようにするのが適切です。

于 2012-07-13T12:03:08.110 に答える