【问题标题】:New layouts in TabHostTabHost 中的新布局
【发布时间】:2013-05-09 12:36:19
【问题描述】:

我在我的应用程序中使用 tabHost,但在其中一个视图(对应于其中一个选项卡)中,我有一个按钮,必须将我带到另一个活动,然后是另一个布局。问题是:我怎样才能让这个新布局可以继续访问选项卡?或者更好地说,我如何在 FrameLayout 中加载这个新布局?。

在这里我上传了我正在尝试做的事情:http://imageshack.us/photo/my-images/541/exampleu.png/

提前致谢!

Pd:我是 Android 新手,也许有更好的方法可以在不使用 TabActivity 的情况下实现我的目的。我愿意接受任何建议。

已编辑:所以我决定按照建议使用 Fragments。现在我有以下内容:

  • AplicationActivity 扩展了 FragmentActivity
  • ClientActivity 扩展了 Fragment
  • SettingsActivity 扩展 Fragment
  • DataClientActivity 扩展了 Fragment

以及以下布局:

  • 活动应用程序
  • activity_client
  • activity_settings
  • activity_data_client

activity_aplicacion.xml 有 TabHost、FrameLayout 和 TabWidget,我可以通过这些标签访问 ClientActivity 和 SettingsActivity。

在 ClientActivity 我有一个名为“new”的按钮,当我按下这个按钮时,我想去 数据客户端活动。因此,在 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.n.r.AplicationActivity 中找不到方法 onClickNew(View)。 id 为“buttonNew”的小部件.Button

所以我现在有点困惑。为什么我应该在 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;
}

}

我只需要将 onClick 侦听器注册到我的 ClientActivity 中的按钮。现在每一个都完美无缺!非常感谢 Divya Motiwala :) 并感谢此链接:http://thepseudocoder.wordpress.com/2011/10/04/android-tabs-the-fragment-way/#comment-410

【问题讨论】:

    标签: android android-tabhost fragment-tab-host


    【解决方案1】:

    您可以在 Tab 中使用 Fragments 代替 activites。点击按钮后,您可以用这样的新片段替换现有片段:

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

    ft.replace第一个参数是fragment要附加到的frameLayout,second是要实例化的fragment类对象,第三个 strong> 是标签名称。

    【讨论】:

    • 问题是我使用的是 API 级别 8,只要我知道 API 级别 11 中引入了 Fragmen。所以我想我会遇到问题?
    • 我接受了你的建议,因为我发现有一个 Android 库支持,所以我将 TabActivity 更改为 FragmentActivity 并将 Activity 更改为 Fragment。我已经编辑了我的问题,请阅读。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-26
    相关资源
    最近更新 更多