Android Повторное использование SurfaceViews из одного XML-файла макета на двух вкладках таблицы - PullRequest
0 голосов
/ 19 ноября 2010

У меня есть файл layout.xml с видом на поверхность и различными кнопками.

Это загружается (setContentView) в два экземпляра класса.Каждый экземпляр представляет собой действие на отдельной вкладке (в другом классе, который является tabactiviy).

Проблема: если я запускаю приложение с tab1 (setCurrentTab) в качестве начальной вкладки, оно (tab1) может рисовать наповерхность.Если я установлю tab2 как открывающую вкладку, она может рисовать на поверхности.НО при переключении между вкладками во время работы только начальная вкладка может рисовать на поверхности.Это как если бы у начальной вкладки была блокировка на поверхности.

Я пытался сделать невидимое отображение поверхности (setvisibility) на неактивной вкладке во время паузы и возобновления, но это только покрывает (я думаю) копию другой вкладкивида поверхности.

Вопрос: могут ли две вкладки разделить вид поверхности одного макета?Как «возобновленная» вкладка может получить контроль над «приостановленной» вкладкой?

PS Я переписал, разорвал, попытался перезагрузить (перестроил это приложение несколькими способами в течение 3 недель, и у меня возникает ощущение, что что-то естьоб общем макете, который мне не хватает.

Ответы [ 2 ]

1 голос
/ 21 ноября 2010

Я сократил этот код до следующего, и до сих пор не могу заставить вкладку не по умолчанию перерисовать свой вид при переходе на свою вкладку (даже если некоторые части, такие как цвет фона, обновляются правильноКод приведен ниже.

Я был бы чрезвычайно признателен за любые советы, как заставить это работать. Он должен показывать «Режим 1» или «Режим 2» в зависимости от выбранной вкладки, но только вкладка, выбранная вtabHost.setCurrentTab (1); когда-либо показывает строку, НО красная или синяя рамка обновляется.

// ЭТО ТОЧКА ВХОДА ////////////////////////////////////////

общедоступный класс TabTest расширяет TabActivity
{Намерение намерения; Bundle params;

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

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

// ШАБЛОН
intent = new Intent (). SetClass (this, TabContent.class); params = new Bundle (); params.putString ("TABNAME", "Mode 1"); intent.putExtras (params); spec = tabHost.newTabSpec ("Шаблон"). setIndicator ("шаблон",
res.getDrawable (R.drawable.tab_pane)) .setContent (намерение); tabHost.addTab (spec);

// ATTEMPT intent = new Intent (). SetClass (this, TabContent2.class);params = new Bundle ();params.putString ("TABNAME", "Mode 2");intent.putExtras (PARAMS);spec = tabHost.newTabSpec ("Попытка"). setIndicator ("попытка", res.getDrawable (R.drawable.tab_pane)) .setContent (намерение);tabHost.addTab (spec);

    tabHost.setCurrentTab(1);
}

}

// Tab tab one ////////////////////////////////////////////

открытый класс TabContent extends Activity {ScreenWrite s = null;SurfaceView screen_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 extends Activity {ScreenWrite s = null;SurfaceView screen_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);
}

}

// Макеты контента ////////////////////////////////////////////////////

// и ////////////////////////////////////////

//////////////////////////////////////// 1050

PS макеты были усечены из представления, но по сути являются просто держателями для цвета фона и вида поверхности.Может поставить если не ясно

0 голосов
/ 12 января 2011

Использование SurfaceView немного сложно, вы можете попробовать вручную установить, например:

screen_2.setVisibility (View.GONE)

Когда он теряет фокус, например через onTabChangedListener.

...