我在我的应用程序中使用tabHost但在其中一个视图中(对应于其中一个选项卡)我有一个按钮,必须将我带到另一个活动,然后是另一个布局。问题是:如何让这个新布局继续访问选项卡?或者更好的说,如何在FrameLayout中加载这个新布局?。
我已经上传了我要做的事情:http://imageshack.us/photo/my-images/541/exampleu.png/
提前致谢。
Pd:我是Android的新手,也许有更好的方法来实现我的purpouse而不使用TabActivity。我愿意接受任何建议。
编辑:所以我决定按照我的建议使用Fragments。现在我有以下内容:
以及以下布局:
activity_aplicacion.xml包含TabHost,FrameLayout和TabWidget,我可以使用选项卡转到ClientActivity和SettingsActivity。
在ClientActivity中,我有一个名为“new”的按钮,当我按下此按钮时,我想去 DataClientActivity。因此,在ClientActivity中,我有以下几点:
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();
}
但是当我运行我的应用程序时,我收到了错误的错误:
05-04 21:55:04.780:E / AndroidRuntime(7515):java.lang.IllegalStateException:无法在视图类android上的onClick处理程序的活动类com.nrAplicationActivity中找到onClickNew(View)方法。 widget.Button,id为“buttonNew”
所以我现在有点困惑。为什么我应该在AplicationActivity中使用onClickNew方法而不是在ClientActivity中我有按钮?
编辑2:我找到了解决方案:
公共类ClientActivity扩展了Fragment {
@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;
}
}
我只需要在ClientActivity中将onClick监听器注册到我的按钮。现在一切都很完美!非常感谢Divya Motiwala :)并感谢此链接:http://thepseudocoder.wordpress.com/2011/10/04/android-tabs-the-fragment-way/#comment-410
答案 0 :(得分:0)
您可以在Tab中使用Fragments
代替活动。点击按钮,你可以用一个新的片段替换现有的片段:
final FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.realtabcontent,newFrag, "New Fragment");
ft.addToBackStack(null);
ft.commit();
在ft.replace
第一个参数是要附加片段的frameLayout, second 是要实例化的片段类对象,第三个是标签名称。