-1

我有一个带有表面视图和各种按钮的 layout.xml 文件。

这被加载(setContentView)到一个类的两个实例中。每个实例都是不同选项卡上的一个活动(在另一个选项卡活动类中)。

问题:如果我使用 tab1 (setCurrentTab) 作为打开选项卡启动应用程序,它 (tab1) 可以在表面上绘制。如果我将 tab2 设置为打开选项卡,它可以在表面上绘制。但是运行时在选项卡之间切换,只有初始选项卡可以在表面上绘制。就好像最初的标签在表面上有一个锁。

我已经尝试在暂停和恢复期间使非活动选项卡上的表面视图不可见(setvisibility),但这只是覆盖(我认为)另一个选项卡的表面视图副本。

问题:两个选项卡可以共享一个布局的表面视图吗?“恢复”选项卡如何从“暂停”选项卡中获得控制?

PS 我已经重写,拆散,尝试重新加载(在 3 周内以多种方式重建了这个应用程序,我觉得我缺少一些关于共享布局的东西。

4

2 回答 2

1

我已将此 cade 缩减为以下内容,但我仍然无法让非默认选项卡重新绘制它在移动到其选项卡时的视图(即使某些部分(例如背景颜色)已正确更新。代码在下面。

我将非常感谢有关使其正常工作的任何建议。它应该根据所选选项卡显示“模式 1”或“模式 2”,但仅在 tabHost.setCurrentTab(1) 中选择的选项卡;曾经显示字符串但红色或蓝色边框确实更新。

// 这是入口点 //////////////////////////////////

公共类 TabTest 扩展 TabActivity
{ Intent 意图;捆绑参数;

public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    Resources res = getResources(); 
    TabHost tabHost = getTabHost(); 
    TabHost.TabSpec spec;  
    Intent intent;  

// 模板
意图 = new Intent().setClass(this, TabContent.class); 参数 = 新捆绑();params.putString("TABNAME", "模式 1"); 意图.putExtras(参数);spec = tabHost.newTabSpec("Template").setIndicator("template",
res.getDrawable(R.drawable.tab_pane)) .setContent(intent); tabHost.addTab(spec);

// ATTEMPT intent = new Intent().setClass(this, TabContent2.class); 参数 = 新捆绑();params.putString("TABNAME", "模式 2"); 意图.putExtras(参数);spec = tabHost.newTabSpec("Attempt").setIndicator("attempt", res.getDrawable(R.drawable.tab_pane)) .setContent(intent); tabHost.addTab(spec);

    tabHost.setCurrentTab(1);
}

}

// 标签内容一 /////////////////////////////////

公共类 TabContent 扩展 Activity { ScreenWrite s=null; SurfaceView 屏幕_1;

@Override
public void onCreate(Bundle savedInstanceState)   
{
    super.onCreate(savedInstanceState);

    setContentView(R.layout.content);

    Bundle params = this.getIntent().getExtras(); 
    String name = params.getString("TABNAME");

    screen_1=(SurfaceView)findViewById(R.id.screen_1);
    s=new ScreenWrite((Context)this, screen_1, name);
}

}

// 标签内容二 /////////////////////////////////

公共类 TabContent2 扩展 Activity { ScreenWrite s=null; SurfaceView 屏幕_2;

@Override
public void onCreate(Bundle savedInstanceState)   
{
    super.onCreate(savedInstanceState);

    setContentView(R.layout.content2);

    Bundle params = this.getIntent().getExtras(); 
    String name = params.getString("TABNAME");

    screen_2=(SurfaceView)findViewById(R.id.screen_2);
    s=new ScreenWrite((Context)this, screen_2, name);
}

}

// 内容布局 /////////////////////////////////

// 和 ////////////////////////////////////////

//////////////////////////////////

PS 布局从提交中被截断,但基本上只是背景颜色和表面视图的持有者。不清楚可以提供

于 2010-11-21T15:54:49.973 回答
0

使用 SurfaceView 有点棘手,您可以尝试手动设置,例如:

screen_2.setVisibility(View.GONE)

当它失去焦点时,例如通过 onTabChangedListener。

于 2011-01-12T11:02:24.753 回答