当前位置: 首页 > 知识库问答 >
问题:

Android 4.0,4.1(

胥承
2023-03-14

我正在为4.0和4.1平板电脑编写一个应用程序,我不想使用支持库(如果不需要的话),因此只使用4.x api。

因此,我的目标平台定义为:>=4.0和<=4.1

该应用程序有一个多窗格布局(两个片段,左边一个小片段,右边一个内容片段)和一个带有标签的操作栏。

与此类似:

单击action bar上的一个选项卡可以更改“外部”片段,然后内部片段是一个包含两个嵌套片段的片段(1.左侧小列表片段,2.wide content片段)。

  • http://developer.android.com/about/versions/android-4.2.html#nestedfragments
  • http://developer.android.com/reference/android/app/fragment.html#getchildfragmentManager()

不幸的是,即使在整个Android开发人员指南中,也几乎没有任何好的例子来展示没有支持库的片段使用的最佳实践;尤其是没有关于嵌套片段的内容。

所以我想知道:如果不使用支持库和它附带的所有东西,就不可能用嵌套的片段编写4.1应用程序吗?(需要使用FragmentActivity而不是Fragment等?)或者最好的做法是什么?

    null

Android支持库现在也支持嵌套片段,因此您可以在Android1.6及更高版本上实现嵌套片段设计。

注意:当布局包含 时,不能将布局膨胀为片断。只有动态添加到片段时才支持嵌套片段。

因为我在XML中定义了嵌套片段,这显然会导致如下错误:

Caused by: java.lang.IllegalArgumentException: Binary XML file line #15: Duplicate id 0x7f090009, tag frgCustomerList, or parent id 0x7f090008 with another fragment for de.xyz.is.android.fragment.CustomerListFragment_

共有1个答案

蒋星驰
2023-03-14

因此,无论使用哪个版本的fragmentManager,xml都不可能在另一个片段中嵌套片段。

因此,您必须通过代码添加片段,这似乎是一个问题,但从长远来看,使您的布局超级灵活。

那么不使用GetChildFragmentManger进行嵌套呢?ChildFragmentManager背后的本质是它将加载推迟到前一个片段事务完成。当然,它只在4.2或支持库中得到自然支持。

它非常简单,处理程序是一个非常非常方便的类,实际上处理程序在当前片段事务完成提交后等待在主线程上执行一个空间(因为片段干扰了它们在主线程上运行的UI)。

// Remember this is an example, you will need to modify to work with your code
private final Handler handler = new Handler();
private Runnable runPager;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    return inflater.inflate(R.layout.frag_layout, container, false);
}

@Override
public void onActivityCreated(Bundle savedInstanceState)
{
    super.onActivityCreated(savedInstanceState);
    runPager = new Runnable() {

        @Override
        public void run()
        {
          getFragmentManager().beginTransaction().addFragment(R.id.frag_container, MyFragment.newInstance()).commit();
        }
    };
    handler.post(runPager);
}

/**
 * @see android.support.v4.app.Fragment#onPause()
 */
@Override
public void onPause()
{
    super.onPause();
    handler.removeCallbacks(runPager);
}

我不会认为这是“最佳实践”,但我有使用这个黑客的实时应用程序,我还没有任何问题。

我还使用此方法嵌入视图寻呼机-https://gist.github.com/chrisjenx/3405429

 类似资料:

相关问答

相关文章

相关阅读