Articles of android fragments

更新片段不起作用

我正在学习Android,在尝试开发应用程序时遇到以下情况: 我有一个Activity有两个Fragments : ReminderListFragment和FilterListFragment 。 第一个片段有一个提醒列表,第二个片段有一个filter列表,其中包含每个filter中注册的项目名称和数量。 但是,当我排除某些提醒时,FilterListFragment值不会更新。 当我删除其中一个filter时会发生同样的事情(在这种情况下,它会删除所选filter的所有记录),它不会更新“提醒”列表。 FilterListFragment代码: @Override public boolean onContextItemSelected(MenuItem item) { if (item.getGroupId() == R.id.context_menu_category) { // Used to verify it it is the right context_menu //Gets the item // position and gets the category in that position: AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); Category category = ((CategoryFilter) lvFilters.getAdapter().getItem(info.position)).getCategory(); // Switch between […]

如何正确扩展LinearLayout以创建自定义视图

我有一些“卡片”,这是一个带有TextView的简单LinearLayout 然后我的主片段有一个垂直的LinearLayout ..在这个主片段中我将这个“卡片”添加到主布局: # main fragment layout View view = inflater.inflate(R.layout.main_activity, null); LinearLayout ll = (LinearLayout) view .findViewById(R.id.main_activity_ll); # get card View card = inflater.inflate(R.layout.card, null); # add to fragment layout ll.addView(card); 这非常好用我的卡填充片段布局的整个宽度。 其实我在期待什么。 现在我为我的卡创建了一个单独的类: Class Card extends LinearLayout{ public Card(Context context) { super(context); View view = LayoutInflater.from(getContext()).inflate( R.layout.card, null); this.addView(view); } } 然后,如果我将卡添加到主片段布局中: # […]

ViewPostImeInputStage ACTION_DOWN

当我试图调试我的程序时,我无法弄清楚错误。 我初始化了两个按钮,并在它们上使用了.setOnClickListener。 当用户单击按钮时,他们应该在LogCat上看到调试消息。 但是,每当我单击按钮,或者如果我单击屏幕上的任何位置时,我会一直看到此消息:ViewPostImeInputStage ACTION_DOWN。 有谁知道该消息表示什么,或者他们是否解决了我的问题? 非常感谢!

使用Rxjava Android从Activity更新片段

我有一个简单的用例,其中: Activity1创建一个fragment1 创建后的fragment1通知活动它是否已创建并更新其activity1视图。 获取通知更新fragment1视图后的activity1。 我正在使用rxandroid,sublibrary rxlifecycle组件和android,但我还在学习阶段,stackoverflow上甚rx-lifecycle没有rx-lifecycle标签,所以我仍然在努力理解这个库的流程.. 编辑 我不喜欢使用EventBus,就像每个人大喊大叫做某事一样,所以Rxjava Observable方法会很有用

获取后栈中的最后一个片段

我看过这篇文章,但这里发布的解决方案对我不起作用: 在backstack中获取最新的片段 当我替换另一个片段时,我使用: FragmentManager manager = getSupportFragmentManager(); FragmentTransaction ft = manager.beginTransaction(); ft.replace(android.R.id.tabcontent, fragment, tag); ft.addToBackStack(null); ft.commit(); 所以,请注意我正在使用标签来检测任何片段。 我的问题尤其如下: 假设我有fragment_A,fragment_B和fragment_C。 我可以从fragment_A或fragment_B获取fragment_C,并且根据调用的父级,我必须做一些特别的事情。 所以,我再次需要恢复后堆栈中的最后一个FRAGMENT。 当我尝试做: FragmentManager fm = getSupportFragmentManager(); for(int entry = 0; entry < fm.getBackStackEntryCount(); entry++){ String ide = fm.getBackStackEntryAt(entry).getName(); Log.i("TAG", "Found fragment: " + ide); } 我得到零。 如果我使用getId()代替,我得到数字,所以我尝试做: int id = fm.getBackStackEntryAt(entry).getId(); Fragment fragment = fm.findFragmentById(id); […]

Android:在片段中放置活动的onCreate()代码的位置?

我将所有活动转换为Fragments,以便我可以在ViewPager中使用它们。 我已经搜索了这个,但我找不到令人满意的答案,所以这就是我在这里问的原因。 在我的活动中,我在onCreate()方法中编写了一些代码。 我例如调用一些findViewById()来将一些xml按钮链接到我的Activity。 我还在onCreate()中使一些视图不可见,设置OnClickListener() ,用文本填充TextView并删除通知,所有这些都在onCreate()方法中。 我的问题是:我应该把这段代码放在片段中? 在onCreate()? onCreateView()? onActivityCreated()? 为什么? 提前谢谢了!

如何从managedQuery转换到LoaderManager / CursorLoader?

我正在开发一个针对API级别8(2.2,Froyo)的Android应用程序。 我正在使用ContentProvider ,这很简单,我正在使用SimpleCursorAdapter填写我的列表视图,但我在SimpleCursorAdapter的文档中注意到,不推荐使用以下注释的无标记构造函数: 不推荐使用此构造函数。 不鼓励使用此选项,因为它会导致在应用程序的UI线程上执行Cursor查询,从而导致响应能力较差甚至应用程序无响应错误。 作为替代方案,使用带有CursorLoader的LoaderManager。 由于我的目标是API级别8,因此LoaderManager与Activity无关。 兼容包中的FragmentActivity类执行此操作,但我没有使用Fragments。 我的问题是:我应该如何在针对11之前API级别的应用中使用LoaderManager/CursorLoader ? 我是否被迫转换到Fragments,或者我应该回到不推荐使用的SimpleCursorAdapter构造函数(但是使用AsyncTask来保持UI线程友好,这就是CursorLoader应该做的事情)?

差异FragmentPagerAdapter和PagerAdapter

我阅读了android pageadapter和fragmentpageadapter的文档,但我没有看到任何区别。 我的意思是一个是片段,一个不是,但是……就是这样吗? 我对片段没有太多经验,所以也许这就是为什么我没有注意到任何差异。 那么,如果我使用FragmentPagerAdapter或PagerAdapter,那么差异是什么?

Android片段oncreateview调用了标签更改

我已经在Android上工作了一段时间,但片段对我来说有点新鲜(因为它们可能是大多数人)。 无论如何,我有以下代码,它工作正常。 我有三个片段,每个标签一个。 我想知道每次切换标签时是否正常调用onCreateView,这样做是否有意义? 每次选项卡更改时,是否应该有一种方法不重绘片段? 我正在从一个有三个活动的应用程序中转换它,每个选项卡一个,每次选项卡更改时重新创建视图似乎都是浪费,以前在选项卡更改之间存在视图就好了。 。 顺便说一下,这段代码来自: http : //thepseudocoder.wordpress.com/2011/10/04/android-tabs-the-fragment-way/ public class Tabs extends FragmentActivity implements TabHost.OnTabChangeListener { final String MAP_TAB = “Map”; final String IMAGES_TAB = “Images”; final String SETTINGS_TAB = “Settings”; TabHost mTabHost; HashMap mapTabInfo = new HashMap(); TabInfo mLastTab = null; private class TabInfo { private String tag; private Class clss; […]

以编程方式全屏制作片段

我有一个ViewPager和FragmentPagerAdapter在一个活动中设置3个片段。 所有片段同时加载并使用保存在内存中 mPager.setOffscreenPageLimit(2); 其中一个片段包含我想要全屏显示的相机预览,没有状态栏或操作栏。 其他片段要求显示操作栏。 如何在保持其他两个片段正常的同时,仅将相机预览片段全屏显示? 我尝试过使用主题,这意味着打破了操作栏。 以编程方式调用以下内容没有帮助,因为它强制整个活动全屏(因此其他两个片段随之而来): requestWindowFeature(Window.FEATURE_NO_TITLE); this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.main); 我也尝试过实现ViewPager.OnPageChangeListener: public void onPageSelected(int position) { if(position == 1) getActionBar().hide(); else getActionBar().show(); } 这确实隐藏了操作栏,但它没有隐藏系统状态栏(我正在谈论通知,状态图标和时间的位置),并且操作栏隐藏/显示animation在滑动时也非常不连贯。 有关我想要做的事情的一个例子,请参阅Snapchat – 他们设法完美地完成相机和其他片段之间的滑动。 编辑: 所以我将onPageSelected更改为: public void onPageSelected(int position) { if(position == 1) { MainActivity.this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); MainActivity.this.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); } else { MainActivity.this.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); MainActivity.this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); } } 这使我可以更改状态栏是否显示。 但是,它会造成大量的猛击。 操作栏的问题相同。 我注意到在Snapchat中状态栏在标签更改完成后上下滑动。 我不确定如何实现这一点,所以有关这方面的任何建议将不胜感激。