片段,两类智能手机和平板电脑?

时间:2013-10-10 16:38:41

标签: java android android-fragments

我正在为平板电脑和智能手机开发应用程序。

我的问题是,当我使用手机或平板电脑时,我是否需要其他类和重复的代码。这是我的代码..

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

抱歉我的英文

2 个答案:

答案 0 :(得分:2)

只应复制基于视图的类以适应屏幕大小。

对于数据,您应该将它们保存为单独的类,并遵循MVC模式,其中视图与数据无关,控制器/公共dataSource适配器/类应该处理数据和视图功能之间的代码。 / p>

答案 1 :(得分:0)

不,你不需要两节课。如果一个布局文件中的所有视图也存在于其他布局中,则不必进行任何特殊处理。但是,如果视图不同和/或它们的ID不匹配,则必须在类中进行检测并相应地分配值。

您必须处理的一件事是您的观点状态。正确处理生命周期,以便通过onSaveInstanceState()onRestoreInstanceState()

处理轮换

就是这样!