我使用下面的代码,它不是渲染graphics布局。 Exception raised during rendering: No tab known for tag null显示exception作为Exception raised during rendering: No tab known for tag null 。 我该如何解决这个问题? <android.support.v4.app.FragmentTabHost xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/tabhost" android:layout_width="match_parent" android:layout_height="match_parent" > <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TabWidget android:id="@android:id/tabs" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="0" android:orientation="horizontal" /> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="0dp" android:layout_height="0dp" android:layout_weight="0" /> <FrameLayout android:id="@+id/realtabcontent" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" /> </LinearLayout> </android.support.v4.app.FragmentTabHost>
假设我有一个活动,其中包含两个FrameLayout(让我们称之为FrameA和FrameB), 每个 FrameLayouts包含一个片段(我们称它们分别为FragmentA1和FragmentB1)。 现在,我使用与以下类似的代码提交一系列单独的片段事务… getFragmentManager() .beginTransaction() .replace(frameId, fragment) .addToBackStack(null) .commit(); …这样我用FragmentA2replaceFrameA中的FragmentA1,然后用FragmentB2replaceFrameB中的FragmentB1,然后用FragmentA3replaceFrameA中的FragmentA2,然后用FragmentB3replaceFrame2中的FragmentB2,最终状态如上图所示只有FragmentA3和FragmentB3可见)。 如果我正确理解了背堆栈是如何工作的,按'back'会交错地插入FrameA和FrameB之间的碎片(反映我如何添加它们)。 有谁知道是否有可能select性地popupFrameA或FrameB上的最后一个事务? (也就是说,如果我按下了“Pop FrameA”,那么FrameA将从FragmentA3转换回FragmentA2,而如果我按下了“Pop FrameB”,则FrameB将从FragmentB3转换回FragmentB2) 补充:我知道我可以使用FragmentManager.findFragmentById(int framelayoutId)方法将片段最后添加到给定的FrameLayout中,但调用FragmentTransaction.remove(fragment).commit()只会从片段中删除片段,回到之前显示的片段。
这两种方法的本质区别是什么? 当我创build一个TextView,我应该使用一个在另一个性能? 编辑:有什么不同 onCreateView() { root = some view View v = new View(some context); root.add(v); return root; } onViewCreated() { View v = new View(some context); getView().add(v); }
我有一个DialogFragment来显示一个像Popup屏幕的View 。 该窗口始终显示在屏幕的中间。 有没有办法设置DialogFragment窗口的位置? 我查看了源代码,但是还找不到任何东西。
我在我的项目中使用Android兼容性库。 我已经设置了如DevGuide( http://developer.android.com/reference/android/app/Fragment.html )中所述的ListFragment,并使用一个简单的CursorLoader基督教使用没有内容提供者( CursorLoader使用没有ContentProvider )。 问题是 ,在我的ListFragment /父活动,我应该打开数据库,返回光标,创build适配器和setListAdapter? 所以在我的应用程序中,我有TitlesFragment,DetailsFragment,FragmentLayoutActivity,DetailsLayoutActivity。 是最好的做法… 在ListFragment的onActivityCreated打开数据库,并在ListFragment的onDestroyclosures它,如下面的代码示例 @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); // Open database playersDatabaseHelper = new PlayersDBAdapter(getActivity()); playersDatabaseHelper.open(); getLoaderManager().initLoader(0, null, this); … } @Override public void onDestroy() { super.onDestroy(); if (playersDatabaseHelper != null) { playersDatabaseHelper.close(); } } 查询数据库并在onCreateLoader返回游标,并在onLoadFinished创buildAdapter和setListAdapter,如下面的代码示例 @Override public Loader<Cursor> onCreateLoader(int id, Bundle args) { […]
好的,每当我尝试在我的应用程序中replace一个片段时,它只会将容器中的片段添加到其他片段中,并保留当前片段。 我试过调用replace和引用视图包含片段,并通过引用片段本身。 这些都不起作用。 我可以使用片段事务pipe理器将片段添加到视图中,但是即使我尝试在添加片段后将其删除,也不起作用。 任何帮助,将不胜感激。 这是我的文件。 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //Setup the actionabar. Use setDrawableBackground to set a background image for the actionbar. final ActionBar actionbar = getActionBar(); actionbar.setDisplayShowTitleEnabled(false); actionbar.setDisplayUseLogoEnabled(true); actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); actionbar.addTab(actionbar.newTab().setText(R.string.home_tab_text).setTabListener(this),true); actionbar.addTab(actionbar.newTab().setText(R.string.insert_tab_text).setTabListener(this)); Fragment fragment = new insert_button_frag(); FragmentTransaction transaction = getFragmentManager().beginTransaction(); transaction.replace(R.id.button_fragment, fragment); transaction.addToBackStack(null); transaction.commit(); } 这是布局 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" […]
我在容器Activity上使用这个方法来显示一个BFrag public void showBFrag() { // Start a new FragmentTransaction FragmentTransaction fragmentTransaction = mFragmentMgr.beginTransaction(); if(mBFrag.isAdded()) { Log.d(LOG_TAG, "Show() BFrag"); fragmentTransaction.show(mBFrag); } else { Log.d(LOG_TAG, "Replacing AFrag -> BFrag"); fragmentTransaction.replace(R.id.operation_fragments_frame, mBFrag); } // Keep the transaction in the back stack so it will be reversed when backbutton is pressed fragmentTransaction.addToBackStack(null); // Commit transaction fragmentTransaction.commit(); } 我从我的容器Activity调用它; […]
我正在构build平板电脑应用程序。 在这个应用程序有一个活动与两个片段。 第一个片段是一个“已知”列表片段,它从数据库查询中显示一个简单的项目布局列表,第二个片段显示有关所选logging(来自列表片段)的详细信息。 第二个片段的思想是它的types取决于列表中显示的logging。 例如,如果logging是客户,则显示所选客户的详细信息,如果他们是库存项目,则显示所选项目的细节等。为了与细节片段进行通信,我创build了每个细节片段类实现的接口。 列表片段在布局xml的活动中是“固定的”。 但是,在创build活动期间创build细节片段,如下所示: super.onCreate(savedInstanceState); setContentView(R.layout.act_hlpfiles_host); ….. FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.add(R.id.laydetailsfragment, FragmentsPool.getHelperFileFragment(501), "recordDetails"); fragmentTransaction.commit(); myDetailsFragment = getFragmentManager().findFragmentByTag("recordDetails"); … myListFragment = (frg_hlpfiles_lstrecords) getFragmentManager().findFragmentById(R.id.frg_lstrecords); …. } 这个代码的问题是myDetailsFragment总是空的。 这是因为fragmentTransaction.commit()不会立即运行,而是在下一次线程准备就绪时发生在主线程上(如android文档所述)。 如果我在onStart()中创build详细片段并在onCreate中实例化列表片段,那么一切正常。 所以问题是:我怎样才能确保fragmentTransaction.commit()已经提交的事务,所以我可以做一些工作与添加片段? 还有什么办法可以等到提交发生,然后继续其余的代码? 感谢您的时间和精力, 克里斯托
我需要用另一个Fragmentreplace一个Activity中的一个Fragment ,下面是Activity的图层文件: <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/home_layout_container"> <fragment android:name="com.foo.FragA" android:id="@+id/home_list" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </FrameLayout> 所以默认情况下是FragA ,现在我想用FragBreplace它,我做了: public void onRegionClicked(Region region) { RegionInfoFragment rif = RegionInfoFragment.newInstance(region); FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); ft.replace(R.id.home_list, rif); } 但是我得到了exception: >6:24:40.685: ERROR/AndroidRuntime(9194): Uncaught handler: thread main exiting due to uncaught exception 05-06 16:24:40.692: ERROR/AndroidRuntime(9194): java.lang.IllegalStateException: The specified child already […]
问题 从另一个片段返回后,片段不会重新连接到其托pipe的ViewPager。 情况 一个活动托pipe一个片段,其布局包含一个ViewPager(下面的例子中的PageListFragment)。 ViewPager由FragmentStateViewPagerAdapter填充。 分页器(下面的例子中的PageFragment中的单个碎片可以打开包含一组新页面的子页面列表。 行为 只要后退button没有按下,所有工作正常。 只要用户closures其中一个子页面列表,就会重新创build之前的列表,但是没有之前显示的页面。 浏览父页面列表上的其他页面仍然有效。 码 示例应用程序可以在github上find: 活动 public class MainActivity extends FragmentActivity { private static final String CURRENT_FRAGMENT = MainActivity.class.getCanonicalName() + ".CURRENT_FRAGMENT"; public static final String ARG_PARENTS = "Parents"; public void goInto(String mHostingLevel, String mPosition) { Fragment hostingFragment = newHostingFragment(mHostingLevel, mPosition); addFragment(hostingFragment); } @Override protected void onCreate(Bundle savedInstanceState) { […]