簡體   English   中英

Android:從片段內將片段添加到活動

[英]Android: Add fragment to activity from within a fragment

我得到了一個包含兩個框架的活動:導航器(作為菜單)和 ContentFragment 作為詳細視圖。 當我單擊導航器中的按鈕時,我想替換顯示在內容框架中的片段。

所以首先,我在我的導航器中創建我的點擊監聽器:

public class Navigator extends Fragment {
    private Callbacks mCallbacks;
    public interface Callbacks {
        void onFunctionSelected(int functionID);
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        mCallbacks = (Callbacks) getActivity();
    }

    @Override
    public void onDetach() {
        super.onDetach();
        mCallbacks = null;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup parentVG, Bundle savedInstanceState) {

        View v = inflater.inflate(R.layout.fragment_navigator, parentVG, false);

        mOsciloscope = (Button) v.findViewById(R.id.navigatorbutton_oscilloscope);
        mOsciloscope.setText(R.string.navigator_oscilloscoop);
        mOsciloscope.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Oscilloscope navigation button pressed
                mCallbacks.onFunctionSelected(1);
            }
        });

        return v;
    }

然后我在我的活動中創建回調接口:

public class MainActivity extends AppCompatActivity
                          implements Navigator.Callbacks {

    public void onFunctionSelected(int functionID) {
        Fragment newContentFragment = ContentFragment.newInstance(functionID);

        getSupportFragmentManager().beginTransaction()
                                   .replace(R.id.content_frame, newContentFragment)
                                   .commit();
    }
}

在那個函數中,我需要片段:

public class ContentFragment extends Fragment {
    private static final String ARGS_FUNCTION_ID = "functionID";

    public static ContentFragment newInstance(int functionID) {
        Bundle args = new Bundle();
        args.putSerializable(ARGS_FUNCTION_ID, functionID);
        ContentFragment fragment;

        switch (functionID) {
            case 1:
                //fragment = new Oscilloscope();
                fragment = new ContentFragment();
                break;
            default:
                fragment = new ContentFragment();
                break;
        }

        fragment.setArguments(args);
        return fragment;
    }
}

當我嘗試運行此測試代碼時,應用程序啟動,當我單擊按鈕時,應用程序停止運行......知道我的錯在哪里嗎?

提前致謝。

編輯:logcat:

02-27 16:39:21.838 2356-2356/com.example.user.meetcombi E/AndroidRuntime: FATAL EXCEPTION: main
                                                                          Process: com.example.user.meetcombi, PID: 2356
                                                                          android.view.InflateException: Binary XML file line #0: Binary XML file line #0: Error inflating class android.support.constraint.LinearLayout
                                                                          Caused by: android.view.InflateException: Binary XML file line #0: Error inflating class android.support.constraint.LinearLayout
                                                                          Caused by: java.lang.ClassNotFoundException: Didn't find class "android.support.constraint.LinearLayout" on path: DexPathList[[zip file "/data/app/com.example.user.meetcombi-1/base.apk", zip file "/data/app/com.example.user.meetcombi-1/split_lib_dependencies_apk.apk", zip file "/data/app/com.example.user.meetcombi-1/split_lib_slice_0_apk.apk", zip file "/data/app/com.example.user.meetcombi-1/split_lib_slice_1_apk.apk", zip file "/data/app/com.example.user.meetcombi-1/split_lib_slice_2_apk.apk", zip file "/data/app/com.example.user.meetcombi-1/split_lib_slice_3_apk.apk", zip file "/data/app/com.example.user.meetcombi-1/split_lib_slice_4_apk.apk", zip file "/data/app/com.example.user.meetcombi-1/split_lib_slice_5_apk.apk", zip file "/data/app/com.example.user.meetcombi-1/split_lib_slice_6_apk.apk", zip file "/data/app/com.example.user.meetcombi-1/split_lib_slice_7_apk.apk", zip file "/data/app/com.example.user.meetcombi-1/split_lib_slice_8_apk.apk", zip file "/data/app/com.example.user.meetcombi-1/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/com.example.user.meetcombi-1/lib/arm64, /system/lib64, /vendor/lib64]]
                                                                              at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
                                                                              at java.lang.ClassLoader.loadClass(ClassLoader.java:380)
                                                                              at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
                                                                              at android.view.LayoutInflater.createView(LayoutInflater.java:616)
                                                                              at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:794)
                                                                              at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:734)
                                                                              at android.view.LayoutInflater.inflate(LayoutInflater.java:496)
                                                                              at android.view.LayoutInflater.inflate(LayoutInflater.java:427)
                                                                              at com.example.user.meetcombi.ContentFragment.onCreateView(ContentFragment.java:39)
                                                                              at android.support.v4.app.Fragment.performCreateView(Fragment.java:2295)
                                                                              at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1382)
                                                                              at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1624)
                                                                              at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1689)
                                                                              at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:794)
                                                                              at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2470)
                                                                              at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2260)
                                                                              at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2213)
                                                                              at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2122)
                                                                              at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:746)
                                                                              at android.os.Handler.handleCallback(Handler.java:751)
                                                                              at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                              at android.os.Looper.loop(Looper.java:154)
                                                                              at android.app.ActivityThread.main(ActivityThread.java:6692)
                                                                              at java.lang.reflect.Method.invoke(Native Method)
                                                                              at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
                                                                              at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)

自己解決了這個問題,它試圖增加我試圖添加的布局,使用了錯誤的線性布局(支持類)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM