0

検索したところ、タブ内でアクティビティを使用することに眉をひそめている人もいるようですが、それを過ぎて...タブを表示したままタブ付きアクティビティを再開するにはどうすればよいですか? タブにアクティビティがあり、メニューを使用して新しいアクティビティを作成し、タブのアクティビティに表示される情報を更新します。メニュー アクティビティから戻ったときに、新しい情報をタブのアクティビティに表示したいと考えています。メニュー選択から startActivityForResult() を使用していますが、戻ってアクティビティを再起動しようとすると...上のタブが消去されます(予想通りだと思いますが、タブ内で更新されたアクティビティを再起動したい) .

タブの作成:

  TabHost host = getTabHost();
  Intent home_intent = new Intent(constants.HOME_ACTION,
    null, this, homeTab.class);
  Intent inbox_intent = new Intent(constants.INBOX_ACTION,
    null, this, inboxTab.class);
  Intent stats_intent = new Intent(constants.STATS_ACTION, null,
    this, infoTab.class);

  host.addTab(host.newTabSpec(constants.HOME_TAG)
    .setIndicator(getText(R.string.home_label),
      getResources().getDrawable(R.drawable.icon))
    .setContent(home_intent));
  host.addTab(host.newTabSpec(constants.INBOX_TAG)
    .setIndicator(getText(R.string.inbox_label),
      getResources().getDrawable(R.drawable.icon))
    .setContent(inbox_intent));
  host.addTab(host.newTabSpec(constants.STATS_TAG)
    .setIndicator(getText(R.string.stats_label),
      getResources().getDrawable(R.drawable.icon)).setContent(
      stats_intent));

タブのアクティビティのメニュー アクティビティから戻る (データベース情報の更新):

  public void onActivityResult(int requestCode, int resultCode, Intent data) {     
  super.onActivityResult(requestCode, resultCode, data); 
  switch(requestCode) { 
  case (constants.ACTIVITY_REQUEST_CODE_UPDATE_PROFILE) : { 
   if (resultCode == Activity.RESULT_OK) { 
    boolean profileUpdated = data.getBooleanExtra(constants.ACTIVITY_BUNDLE_UPDATE_PROFILE, false);
    Log.d(LOG_TAG, "activity returned with " + profileUpdated);
    // Check to see if we updated our profile to refresh the screen
    if(profileUpdated == true){
     // Refresh the screen with the new info
     homeTab.this.finish();
     this.startActivity(getIntent());
    }
   } 
   break; 
  } 
  } 
 }
4

5 に答える 5

1

解決策は次のとおりです。

tabHost.setOnTabChangedListener(this);
public void onTabChanged(String tabId) {
        LocalActivityManager manager = getLocalActivityManager();
        manager.destroyActivity("ID_1", true);
        manager.startActivity("ID_1", new Intent(this, YourMyActivity.class));
    }
于 2011-03-10T13:59:14.293 に答える
0

ええ、タブ内のアクティビティとして自分自身を終了して再開することは、サポートされているユースケースではないと言っても差し支えないと思います。代わりに、「プロファイルが更新された」ことがわかっている場合、その状態を更新するためのよりきめ細かい方法はありますか?たとえば、コンテンツプロバイダーにクエリを実行して、アクティビティに表示される情報を更新しますか?それはすべて、アクティビティでどの情報が表示されているかによって異なります。

于 2010-01-13T16:26:30.597 に答える
0

次のようなことをお勧めします (TABACTIVITY の拡張ではありません):

mlam = new LocalActivityManager(this, false);
final TabHost tabHost = (TabHost) findViewById(R.id.tabhostfaces);
mlam.dispatchCreate(bundle);
mlam.dispatchResume();
mlam.dispatchPause(isFinishing());
tabHost.setup(mlam);

tabHost.setOnTabChangedListener(new OnTabChangeListener() {
    @Override
    public void onTabChanged(String tabId) {
        String currentTag = mTabHost.getCurrentTabTag();
        if(currentTag.equals("tab_ntflist")){
            ntfreglst.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
            mlam.startActivity(currentTag, new Intent(ntfreglst));
        } else if(currentTag.equals("tab_profile")){
            pflvw.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
            mlam.startActivity(currentTag, new Intent(pflvw));
        }
    }
});

ntfreglst と pflvw は既に定義されているインテントです。フラグは、startActivity を呼び出すと、アクティビティが既に実行されているため、onResume メソッドのみが呼び出されることを示します。このように、タブが変更されるたびに、ONRESUME メソッドが呼び出されます。このようにして、すべての更新を onResume メソッド内で行うことができます。

于 2012-01-24T13:42:20.077 に答える
0

うーん… 活動も必ずしも良い考えではないと思います。ただし、どのアクティビティでもブロードキャスト レシーバを登録でき、どのアクティビティでもブロードキャストを送信できることに注意してください。

于 2011-10-30T22:32:24.500 に答える
0

タブ内でアクティビティを使用することに眉をひそめる人もいます

やあ!私は「何人か」です!

タブを表示したまま、タブ付きのアクティビティを再開するにはどうすればよいですか?

あなたは知りません。

もちろん、finish()アクティビティを実行して再起動するのはあなたなので、この 2 行のコードをコメント アウトすることで、その発生を簡単に停止できます。あなたの問題は、あなたがタブを失っていることではありません.あなたが達成しようとしているどんな種類の「リフレッシュ」を行うためのより良い方法がおそらくあるのに、あなたの活動をハンマーで粉砕していることです.

もちろん、そのような更新を行うViewsのは、タブの代わりにタブを持っていればおそらく簡単でしょうActivities

于 2010-01-13T13:11:54.350 に答える