2013-05-04 55 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