Android应用程序设计的几个片段

Android应用程序设计的几个片段,android,android-fragments,Android,Android Fragments,我正在尝试创建一个带有片段的平板电脑应用程序。屏幕的左侧将有四个按钮,而屏幕的右侧将根据单击的按钮而改变。 我已经创建了主要活动和四个片段。每个片段都有自己的布局和几个TextView字段。当应用程序启动时,它会将所有片段加载到RAM中,这样它就可以保持片段状态,这样当用户从一个片段切换到另一个片段时,所有文本字段都会保留它们的文本值,直到他单击最后的提交按钮。该应用程序基于SDK 4.1。应用程序有点慢,尤其是启动时。我想知道它的设计是否恰当,是否有改进的方法 以下是主要活动类别: impor

我正在尝试创建一个带有片段的平板电脑应用程序。屏幕的左侧将有四个按钮,而屏幕的右侧将根据单击的按钮而改变。 我已经创建了主要活动和四个片段。每个片段都有自己的布局和几个TextView字段。当应用程序启动时,它会将所有片段加载到RAM中,这样它就可以保持片段状态,这样当用户从一个片段切换到另一个片段时,所有文本字段都会保留它们的文本值,直到他单击最后的提交按钮。该应用程序基于SDK 4.1。应用程序有点慢,尤其是启动时。我想知道它的设计是否恰当,是否有改进的方法

以下是主要活动类别:

import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity {

    private Button buttonOne;
    private Button buttonTwo;
    private Button buttonThree;
    private Button buttonFour;

    private Fragment fragmentOne;
    private Fragment fragmentTwo;
    private Fragment fragmentThree;
    private Fragment fragmentFour;

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

        buttonOne = (Button) findViewById(R.id.button_one);
        buttonTwo = (Button) findViewById(R.id.button_two);
        buttonThree = (Button) findViewById(R.id.button_three);
        buttonFour = (Button) findViewById(R.id.button_four);

        fragmentOne = new FragmentOne();
        fragmentTwo = new FragmentTwo();
        fragmentThree = new FragmentThree();
        fragmentFour = new FragmentFour();

        FragmentTransaction fragmentTransaction = getFragmentManager()
                .beginTransaction();

        fragmentTransaction.add(R.id.frameLayout_one, fragmentOne);
        fragmentTransaction.add(R.id.frameLayout_one, fragmentTwo);
        fragmentTransaction.add(R.id.frameLayout_one, fragmentThree);
        fragmentTransaction.add(R.id.frameLayout_one, fragmentFour);

        fragmentTransaction.commit();

        buttonOne.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {

                FragmentTransaction fragmentTransaction = getFragmentManager()
                        .beginTransaction();
                fragmentTransaction.show(fragmentOne);
                fragmentTransaction.hide(fragmentTwo);
                fragmentTransaction.hide(fragmentThree);
                fragmentTransaction.hide(fragmentFour);

                fragmentTransaction.commit();

            }
        });

        buttonTwo.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {

                FragmentTransaction fragmentTransaction = getFragmentManager()
                        .beginTransaction();
                fragmentTransaction.hide(fragmentOne);
                fragmentTransaction.show(fragmentTwo);
                fragmentTransaction.hide(fragmentThree);
                fragmentTransaction.hide(fragmentFour);

                fragmentTransaction.commit();

            }
        });
        buttonThree.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {

                FragmentTransaction fragmentTransaction = getFragmentManager()
                        .beginTransaction();
                fragmentTransaction.hide(fragmentOne);
                fragmentTransaction.hide(fragmentTwo);
                fragmentTransaction.show(fragmentThree);
                fragmentTransaction.hide(fragmentFour);

                fragmentTransaction.commit();

            }
        });
        buttonFour.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {

                FragmentTransaction fragmentTransaction = getFragmentManager()
                        .beginTransaction();
                fragmentTransaction.hide(fragmentOne);
                fragmentTransaction.hide(fragmentTwo);
                fragmentTransaction.hide(fragmentThree);
                fragmentTransaction.show(fragmentFour);

                fragmentTransaction.commit();

            }
        });

    }

考虑使用FragmentStateViewPager

在一个理想的世界中,如果您有几个片段要在它们之间切换,就像在您的例子中一样,您可能不希望将它们保留在RAM中。2个或3个碎片可能没问题,4个或更多碎片开始推动它

FragmentStateViewPager将自动分离并在片段移动到“屏幕外”时保存其状态

您必须在每个片段中实现onSaveInstanceState,以保存任何非UI成员变量的任何状态(UI视图自动保存其状态)。然后在onCreate或onCreateView中恢复它们


*当然,如果您的片段的onCreate/onCreateViews很慢,那么这不会有多大帮助。首先,确保你的碎片的创作速度很快。。。首先查找可以从onCreate/onCreate视图移动到onResume的代码。

考虑使用FragmentStateViewPager

在一个理想的世界中,如果您有几个片段要在它们之间切换,就像在您的例子中一样,您可能不希望将它们保留在RAM中。2个或3个碎片可能没问题,4个或更多碎片开始推动它

FragmentStateViewPager将自动分离并在片段移动到“屏幕外”时保存其状态

您必须在每个片段中实现onSaveInstanceState,以保存任何非UI成员变量的任何状态(UI视图自动保存其状态)。然后在onCreate或onCreateView中恢复它们


*当然,如果您的片段的onCreate/onCreateViews很慢,那么这不会有多大帮助。首先,确保你的碎片的创作速度很快。。。首先寻找可以从onCreate/onCreate视图移动到onResume的代码。

谢谢JoshE。我要试试。谢谢你,乔希。我要试试看。