0

タブレットとスマートフォン用のアプリを開発しています。

私の質問は、電話やタブレットを使用しているときに、他のクラスと重複コードが必要かどうかです。これは私のコードです..

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

私の英語でごめんなさい

4

2 に答える 2

2

画面サイズに合わせて、View ベースのクラスのみを複製する必要があります。

データについては、それらを別のクラスとして保持し、ビューがデータと関係を持たないMVCパターンに従う必要があります。コントローラー/共通データソースアダプター/クラスは、データとビュー機能の間のコードを処理する必要があります。

于 2013-10-10T16:45:34.650 に答える
0

いいえ、2 つのクラスは必要ありません。1 つのレイアウト ファイルのすべてのビューが他のレイアウトにも存在する場合、特別な処理を行う必要はありません。ただし、ビューが異なる場合や ID が一致しない場合は、クラス内で検出を行い、それに応じて値を割り当てる必要があります。

処理しなければならないことの 1 つは、ビューの状態です。onSaveInstanceState()ローテーションを処理するために、ライフサイクルを適切に処理します。onRestoreInstanceState()

それでおしまい!

于 2013-10-10T16:53:04.343 に答える