2011-08-10 28 views
8

我有兩個不同的佈局文件,我想用於修改相同的數據,我是切換到我的佈局「編輯視圖」,允許用戶修改圖形數據,然後允許他們切換回顯示詳細圖形的「詳細視圖」(使用androidplot庫)。在Android活動中切換2個佈局

我的問題是,當切換回我的「編輯視圖」時,我的圖形線條消失,只有軸線繪製(因此我的圖形視圖調用了佈局切換和onDraw())。一切都存儲在同一個活動,所以我不明白爲什麼這不起作用?

這些行存儲在Graph View對象本身中,它應該是持久性的,因爲它是我的活動中存儲的變量。

我使用這兩種方法在點擊按鈕上切換佈局文件。

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

    } 




} 

回答

23

每次你調用setContentView時,你都在爲佈局充氣,所以數據必須重新設置。你在做那個嗎?

無論如何,我會建議將兩個佈局合併到一個文件中。然後使用ViewFlipper從一個佈局更改爲另一個佈局。這看起來類似於:

graph.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(); 

希望它能幫助。

+0

謝謝,這個作品很棒。 –

+4

我想在沒有猜測的情況下顯示特定的視圖,如果你在'next'或'first'視圖中使用:'vf.setDisplayedChild(vf.indexOfChild(vfChildView))' – derenio

+0

在你的例子中,你是否還需要重置所有的數據?如果在兩個佈局中都有一個textEdit,並且我想合併來自兩個佈局的信息,並將其放置在第三個佈局的textView中,那我該怎麼做? –

0

我爲我正在處理的應用程序做類似的工作。

解決此問題的一種簡單方法是將第二個視圖的默認可見性設置爲android:visibility="GONE",然後在XML中標識每個視圖。然後您可以設置與view1.setVisibility(View.GONE)view2.setVisibility(View.VISIBLE)

希望這有助於!它對我很好:)