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

时间:2016-04-03 11:41:36

标签: android-fragments android-studio android-spinner

这让我发疯了。我正在尝试使用fragments切换spinner,但我无法弄清楚我的错误在哪里。当我点击其中一个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;
    }
}

1 个答案:

答案 0 :(得分:1)

亲爱的,

    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;
                    }

如果没有中断语句,则执行所有3行。所以第3片段。