2013-05-04 22 views
0

我在我的應用程序中使用了tabHost,但在其中一個視圖中(對應於其中一個選項卡)我有一個按鈕,必須帶我到另一個活動,然後再使用另一個佈局。問題是:我如何獲得這個新的佈局可以繼續訪問標籤?或者更好的說,我如何在FrameLayout中加載這個新的佈局?TabHost中的新佈局

在這裏,我已經上傳我想要做的事:提前http://imageshack.us/photo/my-images/541/exampleu.png/

謝謝!

Pd:我是Android新手,也許有更好的方法來實現我的purpouse而不使用TabActivity。我願意接受任何建議。

編輯:所以我決定按照我的建議使用片段。現在,我有以下幾點:

  • AplicationActivity延伸FragmentActivity
  • ClientActivity延伸片段
  • SettingsActivity延伸片段
  • DataClientActivity延伸片段

及以下佈局:

  • activity_aplicacion
  • activity_client
  • activity_settings
  • activity_data_client

的activity_aplicacion.xml有TabHost,FrameLayout裏和TabWidget並從這些我可以去ClientActivity和使用SettingsActivity標籤。

在ClientActivity中,我有一個名爲「new」的按鈕,當我按下此按鈕時,我想要訪問 DataClientActivity。所以,在ClientActivity我已經TE以下:

public void onClickNew(View view){ 
    DataClientActivity fragmentDataClient = new DataClientActivity(); 
    final FragmentTransaction ft = getFragmentManager().beginTransaction(); 
    ft.replace(android.R.id.tabcontent,fragmentDataClient , "fragmentDataClient "); 
    ft.addToBackStack(null); 
    ft.commit(); 
} 

但是當我運行我的應用程序,我得到了folling錯誤:

05-04 21:55:04.780:E/AndroidRuntime(7515):JAVA .lang.IllegalStateException:找不到方法onClickNew(視圖)在活動課com.nrAplicationActivity爲的onClick處理程序上的視圖類android.widget.Button ID爲「buttonNew」

所以我有點搞不清分辯現在。爲什麼我應該在AplicationActivity中使用onClickNew方法,而不是在ClientActivity中使用按鈕?

EDITED 2:我發現這種情況的解決方案:

公共類ClientActivity擴展片段{

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 

    View view = inflater.inflate(R.layout.activity_clientes, container, false); 


    **// Register for the Button.OnClick event 
    Button b = (Button)view.findViewById(R.id.buttonNew); 
    b.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // Toast.makeText(Tab1Fragment.this.getActivity(), "OnClickMe button clicked", Toast.LENGTH_LONG).show(); 
      Log.e("onClickNuevo2 ", "inicio"); 
      DataClientActivity fragmentDataClient= new DataClientActivity(); 
      final FragmentTransaction ft = getFragmentManager().beginTransaction(); 
      ft.replace(android.R.id.tabcontent,fragmentDataClient, "fragmentDataClient"); 
      ft.addToBackStack(null); 
      ft.commit(); 
     } 
    });** 
    return view; 
} 

}

我只需要到的onClick監聽器註冊到我的按鈕,我ClientActivity內。現在每一個完美的作品!非常感謝Divya Motiwala :)並感謝以下鏈接:http://thepseudocoder.wordpress.com/2011/10/04/android-tabs-the-fragment-way/#comment-410

回答

0

您可以使用Fragments而不是Tab中的activites。是的FrameLayout到片段被連接

final FragmentTransaction ft = getFragmentManager().beginTransaction(); 
    ft.replace(R.id.realtabcontent,newFrag, "New Fragment"); 
    ft.addToBackStack(null); 
    ft.commit(); 

ft.replace第一個參數第二是片段類對象:與上點擊按鈕,你可以用一個新的這樣的替換現有的片段待安裝,第三個是標籤名稱。

+0

問題是我正在使用API​​級別8,只要我知道Fragmens是在API級別11中引入的。所以我想我會遇到這個問題? – kiduxa 2013-05-04 23:24:32

+0

我接受你的建議,因爲我發現有一個Android庫支持,所以我改變我的TabActivity到FragmentActivity和活動碎片。我編輯了我的問題,請閱讀。 – kiduxa 2013-05-05 02:13:12