1

ファイルのすべての「種類(アクティビティ、フラグメント、ビュー)」がレイアウトディレクトリに入るのと少し混乱しています。展開可能なリストを膨らませる以下のコードが機能します。

アクティビティ:

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
}

activity_test.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent">
    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/title" />

    <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"

        <fragment
                android:id="@+id/my_fragment"
                android:name="com.xx.MyFragment"
                android:layout_width="match_parent"
                android:layout_height="match_parent" />
    </FrameLayout>


</LinearLayout>

MyFragment

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_test, null);
}

Fragment_test.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent">
    <ExpandableListView xmlns:android="http://schemas.android.com/apk/res/android"
                    android:id="@+id/my_exp_list"
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent">

    </ExpandableListView>
</LinearLayout>

そのため、メインアクティビティでactivity_test.xmlを膨らませています。これは、MyFragmentを呼び出し、fragment_test.xmlを使用します。周りの線形レイアウトを削除すると、ExpandableListView機能しません。フラグメントにビュー要素のみが含まれているコードを見たことがあります。それで、経験則、または概念は何ですか。いつフラグメントでレイアウトを使用する必要がありますか、いつView要素を使用できますか。

関連するqnの1つ:レイアウトファイルにある種の名前空間を設定することは可能ですか。レイアウトフォルダにたくさんのファイルがあると混乱します。サブディレクトリを持つことは可能ですか?(1つの向き/画面構成内)

編集:

Timmmmの質問に答えるため。return inflater.inflate(R.layout.fragment_test, container, false); 結果にあまり影響を与えないように変更しまし た。

例外は

java.lang.NullPointerException
        at com.xx.MyFragment.onActivityCreated(MyFragment.java:45)
        at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:848)
        at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1035)
        at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1017)
        at android.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:1802)
        at android.app.Activity.performCreate(Activity.java:5011)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
        at android.app.ActivityThread.access$600(ActivityThread.java:130)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:137)
        at android.app.ActivityThread.main(ActivityThread.java:4745)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
        at dalvik.system.NativeStart.main(Native Method)

私が見つけたのは、囲んでいる線形レイアウトを使用しないと、ビューが見つからないということでした。

ExpandableListView eview =(ExpandableListView)getView()。findViewById(R.id.my_exp_list);

eviewはnullですが、LinearLayoutで囲むと、すべてが機能します。

4

1 に答える 1

0

どのビューでも動作するはずであり、「動作しない」よりも優れたエラーがなければ、何が問題なのかを知るのは困難です。LayoutParams次の行を使用する必要があるため、設定されていない可能性があります。

return inflater.inflate(R.layout.fragment_test, container, false);

また、機能しているかもしれません、リストビューに何も入れていませんか?

その他の注意事項:

  1. を繰り返す必要はありませんxmlns:
  2. match_parentの代わりに使用しfill_contentます。それらは同じですが、Googleは名前をより明確にするために変更しました.

名前空間に関しては、これについては完全に同意します。私は通常、レイアウトに接頭辞を付けてactivity_foo.xmlfragment_foo.xmlview_bar.xmlなどの名前を付けます。さらに悪い問題は、すべてのビュー ID が同じ名前空間にあることです! R.id.activity_foo.ok_button入力すると混乱する可能性がR.id.あり、オートコンプリートにはすべてのレイアウトのすべての ID が表示されるため、できると便利です。

ID に名前を付ける以外にこれを回避する方法はありませんが、id="@+id/activity_foo_ok_button"それは面倒で冗長すぎると思います。

于 2012-10-25T12:31:21.887 に答える