2011-08-10 13 views
8

同じデータを変更するために使用したいレイアウトファイルが2つあります。レイアウトを編集ビューに切り替えてグラフデータを変更できるようにしました詳細なグラフを表示する「詳細ビュー」に戻ることができます(androidplotライブラリを使用)。アンドロイドアクティビティで2つのレイアウトを切り替える

私の問題は、私の「編集ビュー」に切り替えると、私のグラフの線がなくなり、グラフの表示のためにレイアウトが切り替わり、onDraw()が呼び出されるということです。すべてが同じアクティビティ内に格納されているので、なぜこれが機能していないのかわかりません。

行は、グラフビューオブジェクト内に格納されます。グラフビューオブジェクトは、アクティビティ内に格納されている変数であるため、永続化する必要があります。

私はこれらの2つの方法をボタンクリックでレイアウトファイルを切り替えるために使用します。

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を呼び出すたびに、データを再度設定する必要があるようにレイアウトを膨張させています。あなたはそれをやっていますか?

とにかく、2つのレイアウトを1つのファイルにマージすることをおすすめします。次に、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があり、2つのレイアウトの情報をマージして3つ目のレイアウトのtextViewに配置したいのですが、どうすればいいですか? –

0

私が取り組んでいるアプリに似たようなことをします。

簡単な方法は、2番目のビューのデフォルトの可視性をXMLでandroid:visibility="GONE"に設定し、コード内の各ビューを識別することです。あなたは可視性を設定することができますview1.setVisibility(View.GONE)view2.setVisibility(View.VISIBLE)

これは役立ちます!それは私にとって素晴らしい仕事でした:)

関連する問題