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