Android Fragment片段切換的問題

发布于 2022-09-01 21:19:32 字数 4203 浏览 13 评论 0

我有一個頁面是兩個Fragment
图片描述

點擊第一頁之後裡面有一個按鈕可以連到一個內頁
這時如果我再去點擊上面的第一頁或第二頁都無法再加入到view裡
請問我該如何做呢?

以下附上Main跟第一頁的Code

<mainActivity>
public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button button1 = (Button) this.findViewById(R.id.btn_fragment1);
    Button button2 = (Button) this.findViewById(R.id.btn_fragment2);
    Button back = (Button) this.findViewById(R.id.button);
    button1.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View view) {
            onButtonClick(view.getId());
        }
    });

    button2.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View view) {
            onButtonClick(view.getId());
        }
    });

    back.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            onBackPressed();
        }
    });
}
private void onButtonClick(int id) {
            FragmentManager fm = getFragmentManager();

            Fragment fragment = fm.findFragmentById(R.id.layout_container);
            if (fragment == null) {

                if (id == R.id.btn_fragment1)
                    fragment = new Sample1Fragment();
                else
                    fragment = new Sample2Fragment();

                replaceFragment(fragment);
            } else if (id == R.id.btn_fragment1
                    && fragment instanceof Sample2Fragment) {
                replaceFragment(new Sample1Fragment());
            } else if (id == R.id.btn_fragment2
                    && fragment instanceof Sample1Fragment) {
                replaceFragment(new Sample2Fragment());
    }

}

public void replaceFragment(Fragment fragment) {
    this.getFragmentManager()
            .beginTransaction()                
            .replace(R.id.layout_container, fragment).addToBackStack(null)
            .commit();
}
public void onBackPressed()
{
    if (getFragmentManager().getBackStackEntryCount() > 0){
        getFragmentManager().popBackStack();
    }
    else super.onBackPressed();
}

}

<SampletFragment1>

public class Sample1Fragment extends Fragment {

private String mTimeString;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    final View view = inflater.inflate(R.layout.fragment_sample1, container,
            false);
    TextView txtDateTime = (TextView) view.findViewById(R.id.txtDateTime);
    txtDateTime.setText("這裡是第一頁");

    Button btn = (Button) view.findViewById(R.id.btn);
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            onButtonClick(view.getId());
        }
    });
    return view;
}

public void replaceFragment(Fragment fragment) {
    this.getFragmentManager()
            .beginTransaction()
            .replace(R.id.layout_container, fragment).addToBackStack(null)
            .commit();
}

private void onButtonClick(int id) {
    FragmentManager fm = getFragmentManager();
    Fragment fragment = fm.findFragmentById(R.id.layout_container);
    if (fragment == null) {

        if (id == R.id.btn_fragment1)
            fragment = new Sample1Fragment();
        else
            fragment = new Sample2Fragment();

        replaceFragment(fragment);
    } else if (id == R.id.btn_fragment1
            && fragment instanceof Sample2Fragment ) {
        replaceFragment(new Sample1Fragment());
    } else if (id == R.id.btn_fragment2
            && fragment instanceof Sample1Fragment ) {
        replaceFragment(new Sample2Fragment());
    }else if (id == R.id.btn_fragment1 && fragment instanceof Sample3Fragment){
        replaceFragment(new Sample1Fragment());
    }

    replaceFragment(new Sample3Fragment());
}

}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

寂寞美少年 2022-09-08 21:19:32

其實自己已經找到解決辦法
修改MainActivity下面的nclick就可以了~
附上代碼

private void onButtonClick(int id) {
    FragmentManager fm = getFragmentManager();

    Fragment fragment = fm.findFragmentById(R.id.layout_container);

    //?????Layout???
    if (fragment == null) {
        if (id == R.id.btn_fragment1) {
            fragment = new Sample1Fragment();
        } else {
            fragment = new Sample2Fragment();
        }

        replaceFragment(fragment);
    } else if ((id == R.id.btn_fragment1) &&
            fragment instanceof Sample2Fragment) {
        replaceFragment(new Sample1Fragment());
    } else if ((id == R.id.btn_fragment2) &&
            fragment instanceof Sample1Fragment) {
        replaceFragment(new Sample2Fragment());
    } else if ((id == R.id.btn_fragment1) &&
            fragment instanceof Sample3Fragment) {
        replaceFragment(new Sample1Fragment());
    } else if ((id == R.id.btn_fragment2) &&
            fragment instanceof Sample3Fragment) {
        replaceFragment(new Sample2Fragment());
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文