2012-01-17 111 views
-1

我有一個使用三個選項卡實現的tabhost並正在運行。我想知道是否有任何返回時點擊相同的選項卡時,它會返回到其初始狀態(如重置)?單擊重置選項卡

我設法使用每個選項卡的「setOnClickListener」方法做到這一點,並開始獲得新的活動,但沒關係,因爲我注意到活動的通過。

謝謝

+0

可以üPLZ解釋?? – Sumant

+0

目前尚不清楚您的問題以及您對我們的期望。請張貼代碼並簡要解釋您的問題。 – kosa

+0

我點擊標籤,其內容將被重新啓動而不會創建新的活動 – Kiotto

回答

1

我有一個醜陋的簡單方法和一個更復雜的方法。

// Re-clickable (active) tabs 
    getTabWidget().getChildAt(0).setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (tabHost.getCurrentTab() == 0) { 
       // Try this : 
       tabHost.setCurrentTab(1); // Ugly easy way 
       tabHost.setCurrentTab(0); 

       // Or do this : 
       SomeActivityGroup.group.onResume(); // More complex way 
      } else { 
       tabHost.setCurrentTab(0); 
      } 
     } 
    } 

現在我很少有時間,如果你喜歡我可以發佈ActivityGroup代碼以及以後。

**這則:

import java.util.ArrayList; 

import android.app.ActivityGroup; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 

public class SomeActivityGroup extends ActivityGroup { 

    View rootView; 

    // Keep this in a static variable to make it accessible for all the nested 
    // activities, lets them manipulate the view 
    public static SomeActivityGroup group; 

    // Need to keep track of the history if you want the back-button to work 
    // properly, don't use this if your activities requires a lot of memory. 
    private ArrayList<View> history; 

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

    @Override 
    protected void onResume() { 

     super.onResume(); 
     this.history = new ArrayList<View>(); 
     group = this; 

     // Start the root activity within the group and get its view 
     View view = getLocalActivityManager().startActivity("SomeActivity", new Intent(this, SomeActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)).getDecorView(); 

     // Replace the view of this ActivityGroup 
     replaceView(view); 
    } 

    public void replaceView(View v) { 
     // Adds the old one to history 
     if (history.size() == 0) { 
      if (rootView != null) { 
       history.add(rootView); 
       rootView = null; 
      } 
     } 
     history.add(v); 
     // Changes this Groups View to the new View. 
     setContentView(v); 
    } 

    public void back() { 
     try { 
      if (history.size() > 0) { 
       history.remove(history.size() - 1); 
       setContentView(history.get(history.size() - 1)); 
      } else { 
       finish(); 
      } 
     } catch (Exception ex) { 
     } 
    } 

    @Override 
    public void onBackPressed() { 
     try { 
      SomeActivityGroup.group.back(); 
     } catch (Exception ex) { 

     } 
     return; 
    } 

} 

只要記住,活動組在ICS已被棄用。

+0

請稍後發佈您的代碼 – Kiotto

+0

好的,我已經添加了ActivityGroup的代碼。如果你想開發ICS,我推薦使用片段和Action Bar Tabs。 – Dante

1

如果您開發一個新應用程序,那麼我強烈建議您使用Fragments和一些兼容性庫,最好是ActionBarSherlock,因爲現在已棄用TabHost和TabActivities的「舊」方法。

下載圖書館,看一看類:

ABSLibraryXX \樣本\ demos中的\ src \ COM \ actionbarsherlock \樣本\演示\程序\ FragmentTabs.java

我保證你會驚奇地發現,它是強大而簡單的。當你在碎片而不是活動之間切換時,碎片狀態會持續存在 - 它們的行爲與視圖相似,而不是活動。

相關問題