在tabhost中重新加载活动

时间:2012-08-14 09:08:38

标签: android android-activity android-tabhost reload

我有一个tabhost,我添加了3个活动(每个标签一个活动)。 每次更改标签时,我都需要知道如何在活动中调用新的实习生。 我为tabhost添加了一个监听器。当我使用clearAllTabs();方法并在监听器内再次添加所有选项卡时,应用程序崩溃。 当我使用代码时,从视图中删除用户点击tabHost.getTabWidget().removeView(tabHost.getTabWidget().getChildTabViewAt(i)); tabHost.addTab(the tab I want to replace);

的特定选项卡

然后新标签位于tabhost的末尾。

我只需要一个示例,了解每次用户点击特定标签时如何重新加载比例活动。

我的代码:

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

        // ActionBar bar = getSupportActionBar();

        // requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);

        Resources res = getResources();
        LocalActivityManager mlam = new LocalActivityManager(this, false);
        final TabHost tabHost = (TabHost) findViewById(android.R.id.tabhost);
        mlam.dispatchCreate(savedInstanceState);
        tabHost.setup(mlam);
        TabHost.TabSpec spec;
        Intent intent;

        // TabHost tabHost = getTabHost();
        // tabHost.setup();

        TabSpec specAll = tabHost.newTabSpec("All");
        specAll.setIndicator("All");
        Intent allIntent = new Intent(this, allActivity.class);
        specAll.setContent(allIntent);

        // specAll.setContent(R.id.allList);

        Log.d("SpecAll",""+specAll.setContent(allIntent));

        TabSpec specIn = tabHost.newTabSpec("in");
        specIn.setIndicator("In");
        Intent inIntent = new Intent(this, inActivity.class);
        specIn.setContent(inIntent);

        TabSpec specOut = tabHost.newTabSpec("Out");
        specOut.setIndicator("Out");
        Intent outIntent = new Intent(this, outActivity.class);
        specOut.setContent(outIntent);

        // Adding all TabSpec to TabHost
        tabHost.addTab(specAll); // Adding all tab
        tabHost.addTab(specIn); // Adding in tab
        tabHost.addTab(specOut); // Adding out tab



        tabHost.setOnTabChangedListener(new OnTabChangeListener() {



                        @Override
                        public void onTabChanged(String tabId) {

                            int i = tabHost.getCurrentTab();
                            //Log.i("@@@@@@@@ ANN CLICK TAB NUMBER", "------" + i);

                            if (i == 0) {
                                Log.d("TAB","" +i);

                            } else if (i == 1) {
                                Log.d("TAB","" +i);
                            }
                            else
                                Log.d("TAB", ""+i);
                        }
                    });


    }

3 个答案:

答案 0 :(得分:4)

似乎有一个活动问题和tabhost.in为了重新加载你必须要做的活动:

specAll.setContent(yourIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));

就在tabHost.addTab

之前

答案 1 :(得分:3)

在我不需要保留制表符片段的简单情况下,我使用下一个代码

        int currentTabId = mTabHost.getCurrentTab();
    mTabHost.clearAllTabs();
    setupTabs();
    mTabHost.setCurrentTab(currentTabId);

答案 2 :(得分:0)

  

我也面临同样的问题,但我这样解决了这个问题......

这是我的TabActivity ....

public class MainActivity extends TabActivity {
TabHost tabhost;
String cTab = "0";
String nTab;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.activity_main);
    tabhost = getTabHost();

    TabSpec one = tabhost.newTabSpec("0");

    // setting Title and Icon for the Tab
    one.setIndicator("", getResources().getDrawable(R.drawable.ic_launcher));
    Intent songsIntent = new Intent(this, FirstActivity.class);
    one.setContent(songsIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
    one.setContent(songsIntent);

    TabSpec two = tabhost.newTabSpec("1");
    // setting Title and Icon for the Tab
    two.setIndicator("", getResources().getDrawable(R.drawable.ic_launcher));
    Intent songsIntent1 = new Intent(this, SecondActivity.class);
    two.setContent(songsIntent1.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
    two.setContent(songsIntent1);

    TabSpec three = tabhost.newTabSpec("2");
    // setting Title and Icon for the Tab

    three.setIndicator("",
            getResources().getDrawable(R.drawable.ic_launcher));
    Intent songsIntent4 = new Intent(this, ThirdActivity.class);
    three.setContent(songsIntent4.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
    three.setContent(songsIntent4);

    TabSpec four = tabhost.newTabSpec("3");
    // setting Title and Icon for the Tab
    four.setIndicator("", getResources()
            .getDrawable(R.drawable.ic_launcher));
    Intent songsIntent5 = new Intent(this, FourthActivity.class);
    four.setContent(songsIntent5.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP));
    four.setContent(songsIntent5);

    tabhost.addTab(one);
    tabhost.addTab(two);
    tabhost.addTab(three);
    tabhost.addTab(four);
    tabhost.setOnTabChangedListener(new OnTabChangeListener() {
        @Override
        public void onTabChanged(String arg0) {
            cTab = "" + tabhost.getCurrentTab();

        }
    });

    int numberOfTabs = tabhost.getTabWidget().getChildCount();
    for (int t = 0; t < numberOfTabs; t++) {
        tabhost.getTabWidget().getChildAt(t)
                .setOnTouchListener(new View.OnTouchListener() {
                    @Override
                    public boolean onTouch(View v, MotionEvent event) {
                        if (event.getAction() == MotionEvent.ACTION_UP) {
                            String currentSelectedTag = MainActivity.this
                                    .getTabHost().getCurrentTabTag();
                            nTab = currentSelectedTag;
                            System.out.println(" nTab  " + nTab);
                            System.out.println("  cTab  " + cTab);
                            if (cTab.equals(nTab)) {
                                if (nTab.equals("0")) {
                                    Intent intent = new Intent();
                                    intent.setAction("com.ensis.first");
                                    MainActivity.this.sendBroadcast(intent);
                                }
                                if (nTab.equals("1")) {
                                    Intent intent = new Intent();
                                    intent.setAction("com.ensis.second");
                                    MainActivity.this.sendBroadcast(intent);
                                }
                                if (nTab.equals("2")) {
                                    Intent intent = new Intent();
                                    intent.setAction("com.ensis.third");
                                    MainActivity.this.sendBroadcast(intent);
                                }
                                if (nTab.equals("3")) {
                                    Intent intent = new Intent();
                                    intent.setAction("com.ensis.fourth");
                                    MainActivity.this.sendBroadcast(intent);
                                }
                            }
                        }
                        return false;
                    }
                });
    }
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
 }}
  

这是我的FirstActivity.java

    public class FirstActivity extends ActivityGroup{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);

ok();
IntentFilter filter = new IntentFilter("com.ensis.first");
registerReceiver(myReceiver, filter);

/**/
    }

    private void ok() {
// TODO Auto-generated method stub
setContentView(R.layout.firstscreen);
Button bt=(Button)findViewById(R.id.button1);
bt.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        Intent it=new Intent(FirstActivity.this,SubActivity.class);
        replaceContentView("activity3", it);
    }
  });
      }

          public void replaceContentView(String id, Intent newIntent) {
        View view = getLocalActivityManager().startActivity(id,newIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)).getDecorView();
        this.setContentView(view);
    }

     private BroadcastReceiver myReceiver = new BroadcastReceiver()
     {
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.v("22222222222222222", "22222222222");
        ok();
    }
      };}