我正在为平板电脑和智能手机开发应用程序。
我的问题是,当我使用手机或平板电脑时,我是否需要其他类和重复的代码。这是我的代码..
large_land / main.xml中
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment class="com.example.example.FragmentMenu"
android:id="@+id/FragmentMenu"
android:layout_weight="30"
android:layout_width="0px"
android:layout_height="match_parent" />
<FrameLayout
android:id="@+id/content_frame"
android:layout_weight="70"
android:layout_width="0px"
android:layout_height="match_parent" />
布局/ main.xml中
<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
class="com.example.example.FragmentMenu"
android:id="@+id/FragmentMenu"
android:layout_width="match_parent"
android:layout_height="match_parent" />
main.java
public class main extends SherlockFragmentActivity {
private boolean isTablet;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
isTablet = findViewById(R.id.content_frame) != null;
if(isTablet) {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.content_frame, new FragmentInicio());
ft.commit();
}
final FragmentMenu frgMenu =(FragmentMenu)getSupportFragmentManager().findFragmentById(R.id.FragmentMenu);
frgMenu.setListMenuListener(new MenuListListener() {
@Override
public void onListMenuSeleccionado(Menu_List c) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, String.valueOf(c.getID()), Toast.LENGTH_SHORT).show();
// HERE IS MY PROBLEM.. WHEN THE DEVICE IS A TABLET THE APP
// OPEN 'FRAGMENTINICIO' OR 'FRAGMENTBLOG',
// BUT WHEN THE DEVICE IS A MOBILE. DO I NEED TO CREATE ANOTHER CLASS AND DUPLICATE CODE?
if(isTablet) {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
switch (c.getID()) {
case 0:
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_CLOSE);
ft.replace(R.id.content_frame, new FragmentInicio());
ft.commit();
break;
case 1:
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.replace(R.id.content_frame, new FragmentBlog());
ft.commit();
break;
}
} else {
Intent i;
switch (c.getID()) {
case 0:
i = new Intent(main.this, InicioActivity.class);
startActivity(i);
break;
case 1:
i = new Intent(main.this, BlogActivity.class);
startActivity(i);
break;
}
}
}
});
}
}
抱歉我的英文
答案 0 :(得分:2)
只应复制基于视图的类以适应屏幕大小。
对于数据,您应该将它们保存为单独的类,并遵循MVC模式,其中视图与数据无关,控制器/公共dataSource适配器/类应该处理数据和视图功能之间的代码。 / p>
答案 1 :(得分:0)
不,你不需要两节课。如果一个布局文件中的所有视图也存在于其他布局中,则不必进行任何特殊处理。但是,如果视图不同和/或它们的ID不匹配,则必须在类中进行检测并相应地分配值。
您必须处理的一件事是您的观点状态。正确处理生命周期,以便通过onSaveInstanceState()
和onRestoreInstanceState()
就是这样!