在android活动中切换2个布局

Joh*_*acs 8 java android android-layout

我有两个不同的布局文件,我想用来修改相同的数据,我是切换到我的布局为"编辑视图",允许用户修改图形数据,然后允许他们切换回"详细视图"这显示了一个详细的图表(使用androidplot库).

我的问题是,当切换回我的"编辑视图"时,我的图形线条消失了,只有轴绘制(所以布局开关和onDraw()正在为我的图形视图调用).一切都存储在同一个Activity中,所以我不明白为什么这不起作用?

这些行存储在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);
        }

    }




}
Run Code Online (Sandbox Code Playgroud)

Xav*_*Gil 25

每次调用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>
Run Code Online (Sandbox Code Playgroud)

然后你只需要调用showNext()切换活动中的布局:

ViewFlipper vf = (ViewFlipper) findViewById( R.id.viewFlipper );
vf.showNext();
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你.

  • 我想显示特定视图而不猜测你是否在`next`或`first`视图使用:`vf.setDisplayedChild(vf.indexOfChild(vfChildView))` (4认同)

alo*_*dev 5

你为什么总是夸大布局?这真的很贵.尝试使用合并布局.这样,您可以将visibilty更改为"Gone"或"Visible".看到更多:http://android-developers.blogspot.com/2009/03/android-layout-tricks-3-optimize-by.html