1

会計アプリケーションに次のコードがあります。

// switch View to the Customer layout, widget id's are the same on both layouts
private void hideExpenseView() {
    setContentView(R.layout.customer_invoices);
}

// switch View to the Supplier layout
private void hideIncomeView() {
    setContentView(R.layout.supplier_invoices);
}

ContentViewを切り替えると、すべての変数マッピングが失われるため、上記は機能しません。残念ながら、SetContentView()を設定した後、変数をマップする必要があります。

これがうまくいけば、これは私のアプリにとって美しくシンプルなソリューションになります。ほら、両方のxmlレイアウトのウィジェットに同じIDという名前を付けました。さまざまな状態に基づいて1つのxmlレイアウトの要素を非表示にする代わりに、ビュー全体を適切なレイアウトに切り替えます。顧客の売上請求書を入力するか、サプライヤーの経費請求書を入力するかは関係ありません。

ビューを切り替えることで、基本的に6行のコードでUIの移行を処理することができ、非常に簡単です。

これが別の立場でまだ可能であることを願っています、誰かが私を正しい方向に押してくれますか?

4

3 に答える 3

1

ViewSwitcher を確認してください: http://developer.android.com/reference/android/widget/ViewSwitcher.htmlを参照してください。

または、supplier_invoices.xml と customer_invoices.xml を含むフレームレイアウトに基づいてアクティビティ レイアウトを作成します。その後、自家製の hide-n-show が g2g になります。それでも、ID を変更する必要があるかもしれません。

于 2012-04-05T16:46:28.910 に答える
0

ビューを2つにまとめることができますLinearLayouts。1つはfor R.layout.customer_invoices、もう1つはforR.layout.supplier_invoicesです。

独自のfindViewByIdを実装する必要があります。

private static final int LAYOUT_EXPENSE = 1;
private static final int LAYOUT_INCOME = 2;

private int currentLayout = LAYOUT_EXPENSE;

private LinearLayout expenseContainer, incomeContainer;

// switch View to the Customer layout, widget id's are the same on both layouts
private void hideExpenseView() {
    switchLayout(LAYOUT_INCOME);
}

// switch View to the Supplier layout
private void hideIncomeView() {
    switchLayout(LAYOUT_EXPENSE);    
}

private void switchLayout(int layout) {
    currentLayout = layout;
    if (layout == LAYOUT_EXPENSE) { 
        expenseContainer.setVisibility(VISIBLE);
        incomeContainer.setVisibility(GONE);
    } else {
        expenseContainer.setVisibility(GONE);
        incomeContainer.setVisibility(VISIBLE);
    }
}

public View findViewById(int id) {
    if (layout == LAYOUT_EXPENSE) return expenseContainer.findViewById(id);
    else return incomeContainer.findViewById(id);
}

あなたは私の考えを理解したと思います。

于 2012-04-05T16:50:40.203 に答える
0

このようにしてください

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:id="@+id/customer_invoices"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <!-- put customer_invoices related tools like TextView, Button, ImageView here -->

    </LinearLayout>

    <LinearLayout
        android:id="@+id/supplier_invoices"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <!-- put supplier_invoices related tools like TextView, Button, ImageView here -->

    </LinearLayout>

</LinearLayout>

Java コード:

public class TestActivity extends Activity {
    View supplier_invoices,customer_invoices;
    public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);

        supplier_invoices = findViewById(R.id.supplier_invoices);

        customer_invoices = findViewById(R.id.customer_invoices);

        }


     // switch View to the Customer layout, widget id's are the same on both layouts
        private void hideExpenseView() {
            setContentView(R.layout.customer_invoices);
            customer_invoices.setVisibility(View.VISIBLE);
            supplier_invoices.setVisibility(View.GONE);

        }

        // switch View to the Supplier layout
        private void hideIncomeView() {

            supplier_invoices.setVisibility(View.VISIBLE);
            customer_invoices.setVisibility(View.GONE);
        }

    }
于 2012-04-05T17:04:23.137 に答える