2011-11-24 62 views
0

下面我的代碼是基於這樣的:http://web.archive.org/web/20100816175634/http://blog.henriklarsentoft.com/2010/07/android-tabactivity-nested-activities/無法使用自己的tabhost嵌套活動的setContentView

我的問題是與應該存儲的活動,所以我可以適當地利用後退按鈕歷史的ArrayList,但是我應用程序崩潰時,我回擊。我認爲這是因爲歷史並不完全存儲視圖。

我說:

View view = getLocalActivityManager().startActivity("ViewPagerActivity", new 
               Intent(this,ViewPagerActivity.class) 
               .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)) 
               .getDecorView(); 

我的背法,看它是否會加載它和它的作品。

public class FeaturedTabGroup extends ActivityGroup { 
     // Keep this in a static variable to make it accessible for all the nesten activities, lets them manipulate the view 
      public static FeaturedTabGroup 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 history; 



     /** Called when the activity is first created. */ 
     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      this.history = new ArrayList(); 
      group = this; 


     // Start the root activity withing the group and get its view 
       View view = getLocalActivityManager().startActivity("ViewPagerActivity", new 
               Intent(this,ViewPagerActivity.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 
      history.add(v); 
      // Changes this Groups View to the new View. 
      setContentView(v); 

      System.out.println("view set successful"); 
     } 

     public void back() { 

      if(history.size() > 0) { 
       history.remove(history.size()-1); 
       setContentView((Integer) history.get(history.size()-1)); 
      }else { 
       finish(); 
      } 
     } 

     @Override 
     public void onBackPressed() { 
      FeaturedTabGroup.group.back(); 
      return; 
     } 

    } 

編輯:

爲了簡便起見,我會用另外一個問題解決這個問題:爲什麼的setContentView(V)工作,但不是當視圖是店在一個ArrayList?將視圖存儲在數組列表中時會發生什麼?

+0

僅供參考,您可以基於亨裏克·拉爾森托夫特的博客文章在這裏得到一個完整的工作示例:http://richipal.com/post/2624844577 – Theo

回答

0

難道你不能用ViewSwitcher(http://developer.android.com/reference/android/widget/ViewSwitcher.html)解決這個問題嗎?它提供了一個更清晰的解決方案,您可以隨時在需要時調用showPrevious()和showNext()。

+0

如果我有兩個以上的活動,我不認爲視頻切換器可以工作 – Adam

+0

您說得對,使用ViewSwitcher意味着您必須在單個活動中實現所有邏輯,以及在單個佈局文件中實現佈局。儘管在屏幕之間導航可能更容易。 – jcxavier

0

setContentView(int)需要佈局資源ID。在你的例子中,你可以嘗試保存視圖對象本身(即沒有類型轉換爲整數)?正如jcXavier所說 - viewswitcher是處理這個問題的更好方法。

+0

history.add(v)是什麼;做?我認爲它將視圖對象添加到數組?取出(整數)給我一個錯誤 – Adam

+0

另外,在replaceView方法中setContentView的工作原理很奇怪。 Arent兩個setContentViews獲得相同的活動視圖,後面從arrayList獲取其視圖? – Adam

0

也許是晚了,但在這裏:(history.size() > 0),將0更改爲1,當大小爲1時,它應該完成。

0

Adam,

我知道它一定是遲到了...但也許我可以幫助其他人。

這裏是我解決了這個問題:

public void back() { 
    View v; 
    if(history.size() > 1) { 
     history.remove(history.size()-1); 
     v = (View) history.get(history.size()-1); 
     FirstGroup.group.setContentView(v); 
    }else { 
     finish(); 
    } 
}