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