簡體   English   中英

在 android 活動中切換 2 個布局

[英]Switching between 2 layouts in android activity

我有 2 個不同的布局文件,我想用它們來修改相同的數據,我要切換到“編輯視圖”的布局,允許用戶修改圖形數據,然后允許他們切換回“詳細視圖” " 顯示詳細圖表(使用 androidplot 庫)。

我的問題是,當切換回我的“編輯視圖”時,我的圖形線消失了,只有軸繪制(因此布局切換和 onDraw() 正在為我的圖形視圖調用)。 一切都存儲在同一個活動中,所以我不明白為什么這不起作用?

這些線存儲在圖形視圖 object 本身中,它應該是持久的,因為它是我活動中的存儲變量。

我使用這兩種方法在單擊按鈕時切換布局文件。

public class GraphLibActivity extends Activity {

    private Graph graph;

    private boolean editView;

    private static TextView coordTextView;


    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        editView = true;

        setContentView(R.layout.graphlib);



        graph = (Graph) findViewById(R.id.graph);

        coordTextView = (TextView)findViewById(R.id.currentCoords);


        (lots of calculations)
        graph.addLine(gelHistogramPoints, linePaint);



        graph.invalidate();      
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        if(editView == true){
            inflater.inflate(R.menu.activity_menu, menu);
        }else{
            inflater.inflate(R.menu.detailed_view_menu, menu);
        }
        return true;
    }

    public boolean onPrepareOptionsMenu(Menu menu){
        menu.clear();
        MenuInflater inflater = getMenuInflater();
        if(editView == true){
            inflater.inflate(R.menu.activity_menu, menu);
        }else{
            inflater.inflate(R.menu.detailed_view_menu, menu);
        }
        graph.invalidate();
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        // Handle item selection
        switch (item.getItemId()) {


        case R.id.detailed_view:
            editView = false;
            setContentView(R.layout.imagegraph);
            return true;


        case R.id.edit_view:
            editView = true;
            setContentView(R.layout.editgraph);             
            return true;

        default:
            return super.onOptionsItemSelected(item);
        }

    }




}

每次調用 setContentView 時,您都在膨脹布局,因此必須再次設置數據。 你這樣做嗎?

無論如何,我建議將兩種布局合並到一個文件中。 然后使用ViewFlipper從一種布局更改為另一種布局。 這看起來類似於:

圖.xml:

<ViewFlipper android:id="@+id/viewFlipper">
    <LinearLayout>
        // Here would go the content of R.layout.imagegraph
    </LinearLayout>
    <LinearLayout>
        // Here would go the content of R.layout.editgraph
    </LinearLayout>
</ViewFlipper>

然后你只需要調用showNext()來切換你的活動中的布局:

ViewFlipper vf = (ViewFlipper) findViewById( R.id.viewFlipper );
vf.showNext();

希望能幫助到你。

為什么你總是誇大布局? 那真的很貴。 嘗試使用合並布局。 這樣,您可以將可見性更改為“已消失”或“可見”。 查看更多: http://android-developers.blogspot.com/2009/03/android-layout-tricks-3-optimize-by.html

我為我正在開發的應用程序做了類似的事情。

解決它的一個簡單方法是將第二個視圖的默認可見性設置為 XML 中的android:visibility="GONE" ,然后在代碼中識別每個視圖。 然后,您可以使用view1.setVisibility(View.GONE)view2.setVisibility(View.VISIBLE)設置可見性

希望這會有所幫助:它對我很有幫助:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM