2012-03-02 53 views
1

我想在Android的相同標籤下打開很多視圖。換句話說,我有一個包含許多選項卡的選項卡主機。其中一個選項卡具有列表視圖作爲內容。當一個列表項被點擊時,我希望它在同一個標​​簽下打開一個新的視圖。我做了一些Google研究,發現我必須使用android片段,但我不確定這一點。你認爲片段的使用是最好的解決方案,還是你有其他想法?先謝謝你。如何在Android的相同標籤下打開很多視圖?

+0

你打算如何返回到同一個選項卡上的列表視圖?片段聽起來是一個不錯的選擇,但你有沒有想過在那裏需要的所有流程? – 2012-03-02 12:42:32

+0

不知道,也許通過重寫onBackPressed方法? – 2012-03-02 12:45:34

回答

1

Fragment和FragmentManager是自Honeycomb以來推薦的路徑。如果您打算定位薑餅或更早的設備,您將需要使用兼容性庫(http://developer.android.com/sdk/compatibility-library.html)。

您會注意到ActivityGroup已被棄用。這並不意味着你現在不能使用它,但是在某個時候你會被迫遷移,所以你現在就可以開始了。

+0

好的,謝謝.. – 2012-03-02 12:55:04

0

在ViewAnimator中使用ActivityGroup類,並通過ID獲取正確的活動。

public class YourActivity extends ActivityGroup { 

    private Stack<String> ids; 
    private LocalActivityManager activityManager; 
    private ViewAnimator animator; 
    private int serial; 

    @Override 
    protected void onCreate(final Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.group); 
     ids = new Stack<String>(); 
     animator = (ViewAnimator) findViewById(R.id.animator); 
     activityManager = getLocalActivityManager(); 
    } 

    @Override 
    public void startActivity(final Intent intent) { 
     String id = "id" + serial++; 
     ids.push(id); 
     View view = activityManager.startActivity(id, intent).getDecorView(); 
     animator.addView(view); 
     animator.setDisplayedChild(ids.size() - 1); 
    } 

    @Override 
    public boolean onKeyDown(final int keyCode, final KeyEvent event) { 
     if (keyCode == KeyEvent.KEYCODE_BACK) { 
      int size = ids.size(); 
      if (size > 0) { 
       String topId = ids.pop(); 
       View view = activityManager.destroyActivity(topId, true).getDecorView(); 
       animator.removeView(view); 

       if (size > 1) { 
        topId = ids.get(size - 2); 
        if (activityManager.getActivity(topId) instanceof ClassA) { 
         ((ClassA) activityManager.getActivity(topId)).onResume(); 
        } else if (activityManager.getActivity(topId) instanceof ClassB) { 
         ((ClassB) activityManager.getActivity(topId)).onResume(); 
        } 
        return true; 
       } 
      } 
     } 
     return super.onKeyDown(keyCode, event); 
    } 
} 
+0

但ActivityGroup不被棄用? – 2012-03-02 12:42:18

相關問題