Как изменить намерение на TabSpec - PullRequest
0 голосов
/ 10 октября 2011

Вот сценарий: у меня есть действие с 4 вкладками, каждая вкладка с разным назначением, каждое намерение с разным действием.Работает отлично.

Что мне нужно, так это как-то изменить намерение на одной из вкладок.Это было бы так же просто, как добавить дополнительные параметры в Intent, который используется на TabSpec.setContent(intent), но я не нашел способа получить это намерение, чтобы изменить его.

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

Я могу изменитьвкладка без проблем, но я не нашел способа передать дополнительные параметры из одного действия в другое, так как исходное намерение, использованное для создания TabSpec, не имело никаких дополнительных параметров.

Есть ли яНеправильный подход к этому?

Есть ли способ заменить намерение TabSpec содержимого?

Спасибо!

Ответы [ 3 ]

1 голос
/ 10 октября 2011

Если вы просто пытаетесь найти способ передачи значений между действиями, вы можете переопределить класс Application.

Способ использования контекста приложения.

Расширьте класс приложения и добавьте ваши значения в качестве его атрибутов. В любом случае, если вы позвоните по указанному ниже коду, он вернет одиночный код.

MyApplication appContext = (MyApplication) getApplicationContext();

Чтобы сделать это, вам нужно добавить это в тег приложения файла манифеста

 android:name=".MyApplication"

Этот метод используется для передачи значений по приложению, когда отправка через намерение невозможна.

Чтобы удалить вкладку, вам нужно будет использовать метод clearAllTabs () и снова добавить вкладки. Код выше должен быть лучше.

1 голос
/ 09 ноября 2011

В моем случае я сохраняю ссылку на намерение в TabActivity

mGalleryTabIntent = new Intent(this, AnActivity.class);
spec = getTabHost().newTabSpec(TAB_GALLERY).setIndicator(res.getString(R.string.footer_gallery),res.getDrawable(R.drawable.gallery_icon_sel)).setContent(mGalleryTabIntent); 

public Intent getStoredTabIntent(){
    return mGalleryTabIntent;
  }

Затем, когда от ребенка я хочу перейти на другую вкладку, передавая Extra вместе с Intent

    MainTabActivity parent = (MainTabActivity)getParent();
    parent.getStoredTabIntent().putExtra(AnActivity.START_VIEW, AnActivity.PAGE_TWO);

    //Navigate to the tab
    parent.getTabHost().setCurrentTabByTag(AnActivity.TAB_GALLERY);

Затем в AnActivity onCreate

Bundle extras = getIntent().getExtras();
if(extras != null && extras.containsKey(START_VIEW)){
  switch (extras.getInt(START_VIEW)) {
    case PAGE_TWO:
      doSomething();
      break;

    default:
      break;
  }

  //Erase the Extra so that navigating to this Tab always displays the standard view unless specified otherwise
  MainTabActivity parent = (MainTabActivity)getParent();
  parent.getStoredTabIntent().putExtra(AnActivity.START_VIEW, "");
}else{
  doStandardStuff();
}

Решение для приложений также хорошо, но я не думаю, что оно мне понадобится для чего-то еще, поэтому я бы предпочелВиды деятельности.

0 голосов
/ 10 октября 2011
TabSpec tabspec1;

private void createTabHost() {

    // initialize tabHost
    tabHost = (TabHost) this.findViewById(R.id.tabhost1);
    tabHost.setup(this.getLocalActivityManager());

    // create tab1
    Intent intent = new Intent(this, AnotherActivity.class).addFlags(
            Intent.FLAG_ACTIVITY_CLEAR_TOP);
    intent.putExtra("myData",
                ObjData);
    tabspec1 = tabHost.newTabSpec("tab1")
            .setIndicator(Utilities
                    .prepareTabView(this, "Title"))
            .setContent(intent);
    tabHost.addTab(tabspec1 );

    // create tab2
       ...
}

метод, который изменяет содержимое этого действия, размещенного на вкладке:

private void reloadTabSpec1() {

        Intent i = new Intent(this, AnotherActivity.class).addFlags(
                Intent.FLAG_ACTIVITY_CLEAR_TOP);
        i.putExtra("myData", ObjData);
        tabspec1.setContent(i);

        // needed for refresh :(
        tabHost.setCurrentTabByTag(tabspec2.getTag());
        tabHost.setCurrentTabByTag(tabspec1.getTag());

}
...