通过工具栏中的微调器切换片段

Switch fragments through spinner in toolbar

这让我发疯。我试图通过使用 spinner 来切换 fragments,但我不知道我的错误在哪里。当我点击其中一个 spinner 项时,它总是显示 片段 3 的内容,其他的不会出现。

我现在在网上浏览了几个小时,但找不到可以理解的解决方案来解决我的问题,因为我是 android 编程的新手。

感谢您的帮助!

MainActivity.java

// Setup spinner
        Spinner spinner = (Spinner) findViewById(R.id.spinner);
        spinner.setAdapter(new MyAdapter(
                toolbar.getContext(),
                new String[]{
                        "Fragment 1",
                        "Fragment 2",
                        "Fragment 3"
                }));

        spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                // When the given dropdown item is selected, show its contents in the
                // container view.
                switch (position) {
                    case 0:
                        getSupportFragmentManager().beginTransaction()
                                .replace(R.id.container, Fragment1.newInstance()).commit();
                    case 1:
                        getSupportFragmentManager().beginTransaction()
                                .replace(R.id.container, Fragment2.newInstance()).commit();
                    default:
                        getSupportFragmentManager().beginTransaction()
                                .replace(R.id.container, Fragment3.newInstance()).commit();
                }

            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {
            }
        });

Fragment1.java

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class Fragment1Fragment extends Fragment {

    public static Fragment1Fragment newInstance() {
        Fragment1Fragment fragment = new Fragment1Fragment();
        return fragment;
    }

    public Fragment1Fragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_fragment1, container, false);
        return rootView;
    }
}

亲爱的,

    switch (position) {
                        case 0:
                            getSupportFragmentManager().beginTransaction()
                                    .replace(R.id.container, Fragment1.newInstance()).commit();

                            break;
                        case 1:
                            getSupportFragmentManager().beginTransaction()
                                    .replace(R.id.container, Fragment2.newInstance()).commit();
                            break;
                        default:
                            getSupportFragmentManager().beginTransaction()
                                    .replace(R.id.container, Fragment3.newInstance()).commit();
                           break;
                    }

没有 break 语句,你的所有 3 行都执行了。所以第三个片段。