Articles of android fragments

如何以编程方式按主要活动更新 – 刷新ViewPager中的片段

我正在构建一个使用Fragment和单个MainActivity的应用程序,它在同一个ViewPager中显示不同的片段,以复制典型MVC应用程序的行为。 问题是我还没有理解如何以编程方式更新片段以使用新的片段更改来更新ViewPager 例如,当我从main调用setFragment(int interval, Point[] snodePoint)时,我有这个Fragment显示图表(在我的意图中),图表应该在ViewPager更新 public class LineFragment extends Fragment { static int interval; static Point snodePoints[]; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final View v = inflater.inflate(R.layout.fragment_linegraph, container, false); Bundle bundle = this.getArguments(); ChartConfig cg = bundle.getParcelable(“FragmentData”); snodePoints = cg.getPoints(); interval= cg.getInterval(); Line l = new Line(); for(int i=0; […]

设置工具栏标题

我试图像我这样设置我的工具栏标题: public class StatisticsPage extends Fragment { public StatisticsPage(){} private FragmentTabHost mTabHost; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.statistics_pagelayout, container, false); Spinner spinner = (Spinner) rootView.findViewById(R.id.statsSpin); ArrayAdapter adapter = ArrayAdapter.createFromResource(getActivity(), R.array.statspage, R.layout.dropdown_item); spinner.setAdapter(adapter); getSupportActionBar().setTitle(“My title”); spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView parentView, View selectedItemView, int position, long […]

片段实现OnClickListener

我有一个应用程序,我正在进行现代化。 此过程的一个步骤是更改为基于片段的布局(使用支持库中的片段)。 我将我的活动转换为碎片,并使布局运行良好(使用ViewPager,很棒的东西!) 我正在让我的活动实现OnClickListener以满足我所有的按钮需求。 我有新的片段化身当然做同样的事情,但看起来“onClick”永远不会被击中。 Fragments有什么特别之处可以防止它们以这种方式工作吗?

ViewPager和FragmentPagerAdapter中的片段的Android生命周期管理

我一直在努力找出使用ViewPager正确管理FragmentActivity中FragmentActivity的方法。 在我详细介绍之前,我所面临的问题的快速摘要如下: 我有一个带ViewPager的FragmentActivity 。 ViewPager使用自定义但非常简单的FragmentPagerAdapter 。 ViewPager每个Fragment都包含一个ExpandableListView 。 我还有一个名为“刷新”的操作栏按钮。 现在,让我们假设ViewPager只有一个Fragment 。 创建活动,填充Fragment的ExpandableListView (到目前为止一直很好)。 单击“刷新”按钮时, FragmentActivity的处理方法将迭代分配给FragmentPagerAdapter的Fragments列表,并调用每个Fragment上的refresh()以填充其ListView。 但是,当设备的方向改变时(例如,从纵向到横向),将重新创建活动,片段也是如此。 现在单击“刷新”按钮将迭代未初始化的Fragments 。 我知道我很模糊,特别是没有示例代码,但请耐心等待。 我从应用程序/活动的开头跟踪了问题和方法调用: FragmentActivity.onCreate() FragmentActivity.setContentView() FragmentActivity.createPagerFragments() < – 这将创建一个Fragments的ArrayList,并将它们分配给一个新的FragmentPagerAdapter,而FragmentPagerAdapter又分配给ViewPager。 Fragment.onAttach() Fragment.onCreate() < – 这里没什么特别的,只是调用super方法。 Fragment.onCreateView() < – 这里没什么特别的,只是给布局充气 Fragment.onActivityCreated() < – 这里也没什么。 <> FragmentActivity.onCreate() Fragment.onAttach() Fragment.onCreate() FragmentActivity.setContentView() FragmentActivity.createPagerFragments() Fragment.onCreateView() Fragment.onActivityCreated() <> FragmentActivity.refresh() < – 迭代来自#13的新创建的片段(不是Android的这些片段!)。 <> 所以问题就像我看到的那样:当Android在屏幕方向改变后重新创建FragmentActivity及其Views (上面调用#9-15),它创建了新的Fragment对象,其状态恢复到了原来是。 […]

什么时候片段的onActivityResult被称为片段生命周期?

当我启动Camera intent时,我注意到onActivityResult在fragment生命周期中的onResume之前被调用。 我还注意到在onStart之后onStart onActivityResult 。 但这是奇怪的部分:我有variablesfileUri ==“一些图像路径”。 这个variables是 onStart中的NOT NULL。 onActivityResult中为NULL 在onResume中再次为NOT NULL 看logCat 12-03 14:39:42.418: D/Fragment1(29220): onStart fileUri: file:///mnt/sdcard/OPS_IMAGES/IMG_20121203_143933.jpg 12-03 14:39:42.463: W/PhoneWindow(29220): Previously focused view reported id 2131034140 during save, but can’t be found during restore. 12-03 14:39:42.463: D/Fragment1(29220): onActivityResult fileUri is NULL!!! 12-03 14:39:42.468: D/Fragment1(29220): onResume fileUri: file:///mnt/sdcard/OPS_IMAGES/IMG_20121203_143933.jpg 最糟糕的是,这只发生在50%的时间。 另外50%的onActivityResult可以毫无问题地访问fileUri值… 我该怎么调试这个? 注意:为简单起见,我没有包含onResume,onStart,onActivityResult方法的代码。 它们只是具有variables检查和日志调用的基本方法。 […]

处理片段中的新内容

我正在编写一个使用NFC来读取存储在其上的数据的应用程序。 我的应用程序使用Fragments和Fragment没有onNewIntent()方法。 因为,我正在阅读的数据是通过处理NFC相关操作的单独类完成的,我唯一需要做的就是更新Fragment中的TextView。 但是,此实现也可用于将新Intent传递给Fragment。 这是我当前使用接口的实现。 在收到新的Intent并且NFC相关检查成功后,我正在呼叫监听器。 这是托管Fragment的FragmentActivity。 public class Main extends FragmentActivity implements ActionBar.OnNavigationListener { private Bundle myBalanceBundle; private NFC nfcObj; private NewBalanceListener newBlanceListener; @Override public void onNewIntent(Intent intent) { setIntent(intent); } @Override protected void onResume() { getNFCState(); super.onResume(); } private void getNFCState() { //Other NFC related codes else if (nfc_state == NFC.NFC_STATE_ENABLED){ readNFCTag(); } […]

Android:CursorLoader在非最顶层的Fragment上崩溃

我有一些使用CursorLoader检索其内容的ListFragments。 当用户向下钻取内容时,一个片段替换另一个片段(活动保持不变)。 但是如果内容在非最顶层的片段上发生变化,则应用程序崩溃: E/AndroidRuntime(18830): FATAL EXCEPTION: main E/AndroidRuntime(18830): java.lang.RuntimeException: Unable to resume activity {com.example.ExampleApp/com.example.ExampleApp.ExampleActivity}: java.lang.IllegalStateException: Content view not yet created E/AndroidRuntime(18830): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2120) E/AndroidRuntime(18830): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2135) E/AndroidRuntime(18830): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:957) E/AndroidRuntime(18830): at android.os.Handler.dispatchMessage(Handler.java:99) E/AndroidRuntime(18830): at android.os.Looper.loop(Looper.java:130) E/AndroidRuntime(18830): at android.app.ActivityThread.main(ActivityThread.java:3683) E/AndroidRuntime(18830): at java.lang.reflect.Method.invokeNative(Native Method) E/AndroidRuntime(18830): at java.lang.reflect.Method.invoke(Method.java:507) E/AndroidRuntime(18830): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) E/AndroidRuntime(18830): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) E/AndroidRuntime(18830): at dalvik.system.NativeStart.main(Native Method) […]

Android studio AssertionError:不要在dumb模式下从read内部调用waitForSmartMode

自从我更新到Android Studio 2.1 RC后,我一直面临这个问题。 快速谷歌搜索显示使用Android Studio 2.1的开发人员正面临问题。 该问题于4月份出现,尚未find解决方案。

为什么`hasEnrolledFingerprints`给出错误,它只需要我的片段中的权限,而不是Google的示例中的活动?

我正在尝试在我的应用程序中实现Google的指纹API(特别是在我的Fragment中)。 谷歌已经举了一个例子,但它是在一个活动中实现的。 我的具体问题是下面的代码检查是否已经注册了指纹,它给了我一个错误(截图如下): 问题 – >我需要做些什么改变才能使它在我的片段中工作(而不是谷歌这样的活动)? if (!mFingerprintManager.hasEnrolledFingerprints()) { purchaseButton.setEnabled(false); // This happens when no fingerprints are registered. Toast.makeText(getActivity(), “Go to ‘Settings -> Security -> Fingerprint’ and register at least one fingerprint”, Toast.LENGTH_LONG).show(); return; }

如何从FragmentManager中删除以前的堆栈条目?

我有一个活动,我使用以下方法切换片段: public void setCurrentFragment(Fragment fragment) { FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); transaction.setCustomAnimations(R.anim.slide_left_right_in, R.anim.slide_left_right_out, R.anim.slide_right_left_in, R.anim.slide_right_left_out); transaction.replace(R.id.contentFrameLayout, fragment, Integer.toString(fragmentId++)); transaction.addToBackStack(Integer.toString(fragmentId)); transaction.commit(); } 我的导航堆栈如下所示: N-2 – > N-1 – > N. 当某个片段N’打开’时,我想要从后台取出前一个(N-1),所以当我按’后’时我想要恢复N-2片段。 当我在N片段中调用FragmentManager.popBackStack(..)时,它会删除N和N-1片段。 在切换到N片段之前,我试图在N-1片段中调用popBackStack(..)。 但是在那种情况下,N-2片段被恢复,并且仅在显示N片段之后。 我的问题是:有没有办法从backstack中删除以前的片段而不popup当前片段?