我正在升级Android应用程序(1.6兼容性),该应用程序使用TabHost
显示三个带有嵌套活动的不同选项卡。
当时,我使用ActivityGroup
技巧在选项卡中显示嵌套的活动,但是我对此方法感到非常不满意,因为处理某些功能确实很麻烦。
我听说过1.6版的Fragments
API兼容性软件包,并且Fragment
看起来非常适合我想做的事情(在带有过渡效果和内容的选项卡中显示嵌套视图/功能),但我无法使其与TabHost
(这是为了与一起使用,Action Bar
但在兼容性包中不可用)。
你们有没有找到一种在您的应用程序中创建这种结构的方法?
我的错误是:
ERROR/AndroidRuntime(955): Caused by: java.lang.RuntimeException: Unable
开始活动ComponentInfo
{com.XXX}:java.lang.IllegalArgumentException:找不到片段MyFragment的ID 0x1020011的视图
码
main.xml
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="5dp"
android:layout_weight="1" />
<TabWidget
android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="0" />
</LinearLayout>
</TabHost>
MainActivity.java
public class MainActivity extends TabActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Resources res = getResources();
final TabHost tabs = getTabHost();
TabHost.TabSpec spec;
Intent i;
i = new Intent(this, MyActivity.class);
spec = tabs.newTabSpec("MyActivity").setIndicator("MyActivity",res.getDrawable(R.drawable.tab)).setContent(i);
tabs.addTab(spec);
}
}
MyActivity.class
public class MyActivity extends FragmentActivity {
private static String TAG = "MyActivity";
private static FragmentManager fragmentManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
ListeResultatFragment fragment = MyFragment.newInstance();
fragmentTransaction.add(android.R.id.tabcontent, fragment, "MyFragment");
fragmentTransaction.commit();
}
}
MyFragment.java
public class MyFragment extends Fragment {
public static MyFragment newInstance() {
MyFragment instance = new MyFragment();
return instance;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment, container, false);
}
}
问题是您MyActivity
尝试MainActivity
通过将其android.R.id.tabcontent
用作容器ID
来接触到该附件。这是不可能的。相反,MyActivity
需要具有自己的布局(例如FrameLayout),可以用作Fragment的父级。在此布局中,必须存在可以由id引用的视图。
假设您有一个名为的布局activity_layout.xml
,其中包含ID为’framelayout’的FrameLayout。然后,您可以将onCreate
方法修改为MyActivity
如下所示:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
View parent = getLayoutInflater().inflate(R.layout.activity_layout, null);
setContentView(parent);
fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
Fragment fragment = MyFragment.newInstance();
fragmentTransaction.add(R.id.framelayout, fragment, "MyFragment");
fragmentTransaction.commit();
}
换句话说,MyActivity
需要能够独立工作。尝试先使其工作,然后嵌入包含TabHost
MyActivity
的MainActivity
容器中。
具体问题是调用自定义arrayadapter的getView方法失败。我使用一个片段来显示一个列表。生成列表的活动允许从微调器中选择人员。然后,我使用所选人员的id从DB中检索数据。我将这些数据打包到指定给ArrayList的自定义holder对象中。以下是创建片段事务的活动代码。 片段正确地获取绑定的数据。onCreate方法和onCreateView方法执行正确。以下是onCreateView
Web 应用可同时包括注解和 web.xml/web-fragment.xml 部署描述符。如果没有部署描述符,或有一个但其 metadata-complete 没有设置为true,web.xml、web-fragment 和注解如果在应用中使用则必须被处理。下表描述了是否处理注解和 web.xml 的 fragment。 TABLE 8-1 Annotations and web fragmen
Fragment 组件提供了用于减少不必要嵌套的组件。组件能够在不额外创建 DOM 元素的情况下,在 render() 方法中返回多个元素。更早的 Rax 版本已经对数组的返回进行了支持,Rax 1.0 采用了更为标准的方式。 示例 <Fragment> <header>A heading</header> <footer>A footer</footer> </Fragment> //
本文向大家介绍Android开发 Activity和Fragment详解,包括了Android开发 Activity和Fragment详解的使用技巧和注意事项,需要的朋友参考一下 1.Activity的生命周期 1)多个Activity组成Activity栈,当前活动位于栈顶。我们先来看看各种Activity基类的类图: 当Activity类定义出来之后,这个Activity何时被实例化、它所包含
我尝试使用以下< code>ViewTreeObserver获取< code >片段中< code>ImageView的高度和宽度: 运行此代码会导致以下异常: 文档说 已被弃用,但是如果我按照建议使用 ,我会收到一个未定义的错误。 我做错了什么?
描述 可以在 vnode 片段上添加生命周期方法 var groupVisible = true var log = function() { console.log("group is now visible") } m("ul", [ m("li", "child 1"), m("li", "child 2"), groupVisible ? m.fragme