Articles of android fragments

Android片段实现问题

这是我的片段的xml: 这是我的片段的java文件:( FoodItem只是一个自定义对象,我用来存储片段代表的每个食物项目的信息) package com.thenewjonathan.foodtracker.fragments; import android.app.Activity; import android.app.Fragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.CheckBox; import android.widget.ImageView; import android.widget.TextView; import com.thenewjonathan.foodtracker.R; import com.thenewjonathan.foodtracker.enums.GoodBad; import com.thenewjonathan.foodtracker.objects.FoodItem; public class FoodItemDisplay extends Fragment { private static final String FOOD_ITEM_NAME = “blank”; private FoodItem foodItem; private String foodItemName; private ImageView image; private TextView itemNameView; private […]

片段是否应该有一个选项来保留其视图层次结构中的点击事件?

在这里看到几个问题关于Fragments将他们的点击事件“传递”到底层Fragments可点击Views后,我回想起我曾经遇到过这个问题。 实际发生的是,如果用户点击最顶部Fragment的空白区域,由于其ViewGroup不可点击,该事件将由可点击的View (即Button )处理,该View方便地放置在用户手指的正下方。 我通过使顶部Fragment的ViewGroup可单击来修复它。 当时我并没有多想,但这个解决方案似乎有点“hacky”。 我理解,默认情况下不可点击的View是不会拦截点击事件的正常行为,但是人们会认为, Fragments一个主要用途是显示视图层次结构(之前只有Activity完成的任务)在这个意义上它将类似于一个Activity 。 当一个Activity触发Intent创建一个新Activity ,然后此Activity在屏幕上时,没有任何点击事件传递给底层Activity 。 我意识到一个Activity可以包含很多Fragments ,这些Fragments可能无法填满整个屏幕甚至没有xml,但有时候点击事件只能由最顶层的Fragment保留。 尽管如此,这里提出的问题是: 1)将ViewGroup设置为可点击的最顶层Fragment是解决此问题的最佳方法吗? 2)这个function是否存在而且我不知道它? 如果没有,应该吗?

Child Fragment的setUserVisibleHint和onResume未被调用

我试图在用户将页面切换到我的子片段时调用一个函数。 但是,当我尝试使用setUserVisibleHint和onResume时,两个函数都是从我的父片段调用的。 首先,我在Activity设置了一个视图寻呼机 然后在A1,A3和B1中,我有setUserVisibleHint和onResume函数。 setUserVisibleHint和onResume函数 @Override public void setUserVisibleHint(boolean visible) { super.setUserVisibleHint(visible); Log.d(“A1”, “setUserVisibleHint”); // A3 for Fragment A3 and B1 for Fragment B1 if (visible && isResumed()) onResume(); } @Override public void onResume() { super.onResume(); Log.d(“A1”, “onResume”); // A3 for Fragment A3 and B1 for Fragment B1 if (!getUserVisibleHint()) return; } 问题: 当我从页面A单击页面B并且视图是片段B1时,我得到(这没关系) D/A1: […]

如何仅在Tab布局中将浮动操作按钮专门放在一个片段上

我试图实现以下但没有成功。我有两个材料设计滑动选项卡。我使用此库 ‘com.oguzdev:CircularFloatingActionMenu:1.0.2’来实现FAB但是当我将选项卡滑动到第二个选项卡时,FAB仍然附加到新片段。 我想在第二个片段上隐藏FAB 。 有没有办法实现这个目标?

ClassCastException:CustomFragment无法强制转换为android.app.Fragment /使用android.support.v4.app.Fragment

我正在开发一个分为一个库和两个应用程序的应用程序:1个用于手机,另一个用于平板电脑。 库中定义了许多代码和布局,并且在应用程序中只定义了几个部分。 我在一个Activity使用片段,其中一个ViewPager用于电话版本(库中定义的布局和活动,在电话应用程序中没有变化使用)。 对于平板电脑版本,我想并排显示我的片段(2),而不是在ViewPager ,所以我尝试构建这样的XML布局: 我的问题是代码正在我的手机应用程序上运行,但不在我的平板电脑应用程序上。 在这一个,我得到这个exception堆栈: 07-11 17:41:14.032: E/AndroidRuntime(14754): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1050) 07-11 17:41:14.032: E/AndroidRuntime(14754): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1782) 07-11 17:41:14.032: E/AndroidRuntime(14754): … 11 more 07-11 17:41:14.032: E/AndroidRuntime(14754): Caused by: java.lang.ClassCastException: com.test.Fragment1 cannot be cast to android.app.Fragment 07-11 17:41:14.032: E/AndroidRuntime(14754): at android.app.Fragment.instantiate(Fragment.java:560) 07-11 17:41:14.032: E/AndroidRuntime(14754): at android.app.Fragment.instantiate(Fragment.java:535) 07-11 17:41:14.032: E/AndroidRuntime(14754): at android.app.Activity.onCreateView(Activity.java:4168) 07-11 17:41:14.032: E/AndroidRuntime(14754): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:664) […]

Depth Pager Transformer就像SnapChat一样

我正在尝试使用DepthPageTransformer实现ViewPager ,就像Snapchat应用程序一样。 在SnapChat应用程序中,有一个Camera屏幕始终位于ViewPager中心,从左或右滑动会在摄像机屏幕上方显示其他碎片。 我从这个链接find了DepthPageTransformer代码。 但是这个演示的问题在于它从后面带来了所有下一个屏幕视图。 就像SnapChat一样,我在中央有一个摄像头屏幕,左边有2个屏幕,在摄像头屏幕右边有两个屏幕。 那么,我怎样才能创建一个PageTransformer ,它可以在我的中心屏幕顶部左侧或右侧显示片段,即Camera?

重启时重放.replace片段时出现IllegalStateException

我正在使用FragmentTransaction.replace()来交换碎片。 该应用程序第一次启动没有问题。 由于savedInstanceState和提交新的片段事务之间存在冲突,因此在旋转设备时会抛出IllegalStateException 。 不涉及AsyncTask。 一个StackOverflow问题建议将setContentView()调用放在onResumeFragments() ,但这似乎没有任何效果。 与onPostResume()相同。 另一个StackOverflow问题是覆盖onConfigurationChanged() 。 从某种意义上说,这是因为没有重新启动Activity,所以不会发生exception。 但是,这可以防止具有不同纵向和横向布局的片段在这些布局之间切换。 在onConfigurationChanged()调用setContentView()会导致类似的错误( IllegalArgumentException:Binary XML file line#25:Duplicate id 0x12345678,tag null或parent id with another fragment ) 使用fragmentTransaction.commitAllowingStateLoss()而不是.commit()会导致IllegalStateException:Activity已被销毁 。 我如何让它工作? 更多exception信息: java.lang.RuntimeException:无法启动活动ComponentInfo {myapp / myap.MainActivity}: android.view.InflateException:二进制XML文件行#25:在myapp.MainActivity.onResumeFragments(MainActivity.java:450)中填充类片段时出错 引起:java.lang.IllegalStateException:在myapp.fragments.FragmentChange.onFragmentChange(FragmentChange.java:128)的> android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1533)的onSaveInstanceState之后无法执行此操作)atapp.MainActivity.onNavigationDrawerItemSelected(MainActivity.java:490)myapp.fragments.NavigationDrawerFragment.selectItem(NavigationDrawerFragment.java:197)myapp.fragments.NavigationDrawerFragment.onCreate(NavigationDrawerFragment.java:78)at myapp.MainActivity.onResumeFragments at myapp.MainActivity.onNavigationDrawerItemSelected(MainActivity.java:490) (MainActivity.java:450) 旋转设备时代码中的顺序是: MainActivity.onPause() MainActivity.saveInstanceState() NavigationDrawerFragment.onSaveInstanceState() MainActivity.onStop() MainActivity.onDestroy() MainActivity.onCreate() super.onCreate(savedInstanceState); MainActivity.onResumeFragments() setContentView() NavigationDrawerFragment.onCreate() MainActivity.onNavigationDrawerItemSelected() fragmentTransaction.commit(); 主要活动: public […]

片段中的广播接收器不接收来自服务的意图

我有一个片段和服务如下: 我在文件Fragment.java中注册和注销LocalbroadcastManager Fragment.java @Override public void onStart() { // TODO Auto-generated method stub super.onStart(); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(ffmpegService.PROGRESS); intentFilter.addAction(ffmpegService.DONE); LocalBroadcastManager.getInstance(getActivity()). registerReceiver(receiver, intentFilter); } @Override public void onStop() { LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(receiver); super.onStop(); } private final BroadcastReceiver receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if(intent.getAction().equalsIgnoreCase(ffmpegService.PROGRESS)){ …. } } 在ffmpegService类中,我将广播发送到1个处理程序中的片段,如下所示: ffmpegService.java […]

如何从活动更新Android片段?

我想根据从Internet上下载的数据定期更新片段的显示。 我已经创建了一个Timer和Runnable来定期检索这些数据以及片段中的一个方法来更新它,但我似乎无法弄清楚如何获取从活动到片段的引用以便更新它。 我有以下代码,这些代码主要由ADT的Android Project向导生成: protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d(tag, “onCreate()::Entering…”); setContentView(R.layout.activity_main); // Set up the action bar. final ActionBar actionBar = getSupportActionBar(); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); // Create the adapter that will return a fragment for each of the // primary sections of the activity. mSectionsPagerAdapter = new SectionsPagerAdapter( getSupportFragmentManager()); // Set up the ViewPager with […]

棒棒糖中的活动和片段转换

我正试图围绕Lollipop新的Activity Transition框架。 活动过渡非常简单,这里有一些基本信息 ,但Fragment Transition没有记录,我无法让它工作。 我试过这个用例(在Android中很常见): 案例1:ActA + FragA – > ActB + FragB sharedElement是FragA和FragB的图像 。 我没有提出工作代码,所以我退后一步尝试 案例2:ActA + FragA – > ActB 在FragA和ActB上FragA ActB 。 animation不起作用,我只能看到当我点击FragA上的图像时,图像消失,在animation的持续时间后,它会在ActB中popup。 FragA外部的共享视图,但ActA(例如Toolbar )内部的animation正确。 在这种情况下,sharedImage是RecyclerView中的imageView,可能是项目布局xml中的xml标签android:transitionName=”shared_icon”不起作用吗? 这是我的主题: true true true @bool/true_bool @bool/true_bool @transition/window_transition.xml @transition/window_transition.xml @transition/window_transition.xml @transition/window_transition.xml @transition/window_transition.xml @transition/shared_elements_transform.xml @transition/shared_elements_transform.xml @transition/shared_elements_transform.xml @transition/shared_elements_transform.xml window_transition.xml: shared_element_transition.xml: