Articles of android fragments

共享元素转换没有预期的行为

我实现了从RecyclerView中的图像到新Fragment中的图像之间的共享元素转换。 RecyclerView被托pipe在一个Activity中的一个片段中,目标片段被托pipe在另一个Activity中。 当我点击我的图片时,转换就像预期的那样发生,我得到了我的片段。 但是当我点击后退button时,转换正试图将我的图像放在我的RecyclerView的第一个位置,而当前显示的图像不一定是第一个。 从这种情况出发,我认为是因为它是一个图像列表,我在里面设置了一个转换名称,可能是因为所有的图像都有相同的转换名,这个过程是混乱的,只是得到第一个图像名称。 所以也许我应该dynamic地给每个人一个不同的过渡名称。 我也为目标图像设置了相同的名称,并在每次select新图像时重置它。 但它仍然无法正常工作。 任何人都可以帮助我吗? 这里是我的onItemClickListener中的代码: mAdapter.setOnItemClickListener(new RssItemAdapter.OnItemCLickListener(){ @Override public void onItemClick(View view, int position) { final RssItem item = mAdapter.getItem(position); final RssElementIntent intent = new RssElementIntent(getActivity(), item, position); // mRootView is the view of the fragment final ImageView image = (ImageView) mRootView.findViewById(R.id.rss_element_image); image.setTransitionName(getString(R.string.transition_name_rss_feed_picture) + position); ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation( getActivity(), […]

android片段子类中的getMenuInflater() – 无法parsing方法

我正在尝试在inheritanceFragment类的类中充气菜单。 这是我的OnCreateOptionsMenu()方法 – @Override public boolean OnCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.forecastfragment, menu) ; return true; } 这引发了以下错误: 无法parsing方法'getMenuInflater()' 我试过了 : MenuInflater inflater = getActivity().getMenuInflater(); 但是之后Android Studio突出显示了红色的@Override并指出: 方法不会覆盖超类的方法 我也尝试在同一个类中创build一个getMenuInflater方法,并让它返回new MenuInflater(this) public MenuInflater getMenuInflater() { return new MenuInflater(this); } 但是随后出现以下错误: 错误:不兼容的types:ForecastFragment不能转换为上下文 错误:方法不会覆盖或实现超types的方法 我该怎么办?

用碎片重现Honeycomb GMail UI

我试图用碎片重现Honeycomb GMail UI,但不能。 这是我想要的 初始状态: +——–+—————+ | | | |Accounts| Folders | | | | +——–+—————+ select文件夹后: +——–+—————+ | | | |Folders | Items | | | | +——–+—————+ 帐户,文件夹和项目是碎片。 (显然后退button应该进入初始状态) 我尝试了以下布局: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" android:id="@+id/root"> <FrameLayout android:id="@+id/left_pane" android:layout_weight="1" android:layout_width="0px" android:layout_height="match_parent" /> <FrameLayout android:id="@+id/right_pane" android:layout_weight="1.6" android:layout_width="0px" android:layout_height="match_parent" /> </LinearLayout> 不幸的是,这不起作用,因为我无法将我的文件夹片段从右窗格移动到左窗格(片段只能添加一次)。 我可以创build新的文件夹,但是这是相当浪费资源,需要仔细的状态pipe理(尤其是当后退button被按下时),看起来并不像我想要的样子。 我尝试使用3 FrameLayouts(左,中,右与权重1,1.6,2.56),但我不能让FrameLayout崩溃,当片段不显示。 […]

片段中的ViewPager在返回时丢失内容

我正在实施tabhost使用FragmentActivity ,在第一个选项卡下我加载一个包含一个CirclePageIndIcator和CirclePageIndIcator的欢迎片段,我需要加载4个视图在CirclePageIndIcator 这是我的WelcomeFragment public class WelcomeFragment extends Fragment { PageAdapter mAdapter; ViewPager mPager; CirclePageIndicator mIndicator; List<Fragment> fragments; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.frag_welcome_layout,null); mPager=(ViewPager)view.findViewById(R.id.myViewPager); mIndicator=(CirclePageIndicator)view.findViewById(R.id.circlePageIndicator1); fragments=new ArrayList<Fragment>(); return view; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); Fragment fragment; for(int i=0;i<4;i++) { fragment= Fragment.instantiate(getActivity(), TipsFragment.class.getName()); fragments.add(fragment); } […]

父代片段视图已经创build后添加嵌套片段

我试图创build一个片段,其中有一个公共的方法来添加子片段本身。 我一直在阅读可能类似的问题,但到目前为止还没有find任何帮助。 我已经将问题简化为如下所示的简单testing应用程序。 一旦fragA被添加到主布局中,我调用公共方法fragA.addFragB()来获取它以将自己的FragmentClassB实例添加到自身,但是这会导致testing应用程序崩溃,从而指示“活动已被销毁”(请参阅LogCat在post的末尾)。 这是否意味着fragA已被销毁,所以我不能将fragB添加到它,还是意味着fragB已经被销毁,所以我不能将它添加到fragA ? 或者这是否意味着其他什么? MainActivity.java public class MainActivity extends FragmentActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); FragmentManager fragMan = getSupportFragmentManager(); // add Fragment A to the main linear layout FragmentTransaction fragTrans = fragMan.beginTransaction(); FragmentClassA fragA = new FragmentClassA(); fragTrans.add(R.id.mainLinearLayout, fragA); fragTrans.addToBackStack("A"); fragTrans.commit(); // get Fragment A to add a […]

setRetainInstance(true)+ setCustomAnimations(…)=每个方向更改的animation?

背景 我有一个片段的活动,需要被创build时animation,但不是当方向改变时。 片段被dynamic地插入到布局中,因为它是导航 – 抽屉式活动的一部分。 问题 我想避免重新创buildconfiguration更改的片段,所以我在片段中使用了setRetainInstance。 它工作,但由于某种原因,animation也会重新启动,每次我旋转设备。 我做了什么 我已经添加到片段: @Override public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRetainInstance(true); } 这对于活动: final FragmentManager fragmentManager = getSupportFragmentManager(); final FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); MyFragment fragment= (MyFragment) fragmentManager.findFragmentByTag(MyFragment.TAG); if (fragment== null) { fragmentTransaction.setCustomAnimations(R.anim.slide_in_from_left, R.anim.slide_out_to_right); fragment= new MyFragment(); fragmentTransaction .add(R.id.fragmentContainer, fragment, MyFragment.TAG).commit(); } fragment_container.xml <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" […]

更改工具栏和CollapsingToolbarLayout以编程方式滚动标志

我有一个单独的活动Android应用程序与大量的片段。 当我显示一个列表屏幕时,我想使用Toolbar , app:layout_scrollFlags="scroll|enterAlways"属性。 在细节片段中,我想使用CollapsingToolbarLayout和一个图像。 由于这是一个单一的活动应用程序,我只有一个Toolbar 。 是否有可能修改我的布局编程,以适应这两种情况?

MapFragment在getMapAsync(this)方法中导致NullPointerException

我已经实现了一个在运行时添加MapFragment的活动。 MapFragment xml有静态fragment ,我试图在运行时添加。 另外我发现有一些问题在棒棒糖在运行时添加地图片段。 请检查问题提出和临时解决scheme 我也在下面给出了我的代码, fragment_map.xml <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".fragment.MapsFragment"> <fragment android:id="@+id/map" android:name="com.google.android.gms.maps.SupportMapFragment" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="appCreators.bloodfinder.activity.MapsActivity"/> <include android:id="@+id/layout" layout="@layout/template_custom_spinner"/> </FrameLayout> MapsFragment.java 在onMapReadyCallback实现 public class MapsFragment extends SupportMapFragment implements OnMapReadyCallback 在onResumecallback @Override public void onResume() { super.onResume(); ((SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map)).getMapAsync(this); } 这总是返回我空,我也试过了, ((SupportMapFragment) getActivity().getSupportFragmentManager().findFragmentById(R.id.map)).getMapAsync(this); 这也返回NullPointerException MapsActivity.java getSupportFragmentManager().beginTransaction().add(R.id.fragmentContainer, MapsFragment.newInstance()).commit(); 我将这个添加到Activitycallback的onCreate方法中。 我无法弄清楚为什么我仍然得到NullPointerException ! 有时我Attempt to […]

片段newInstance为什么使用参数?

这两种方法的真正区别是什么? 我正在使用标准的旧时装束: public static final Fragment newInstance(int val1, int val2) { TestFragment f = new TestFragment(); Bundle bundle = new Bundle(); bundle.putInt("val1", val1); bundle.putInt("val2", val2); f.setArguments(bundle); return f; } 我正在设置实例成员 public static final Fragment newInstance(int val1, int val2) { TestFragment f = new TestFragment(); f.val1 = val1; f.val2 = val2; return f; }

android中片段/对话框之间的通信

我有一个有两个片段的活动:一个用于在GridView中显示产品,另一个用于显示用户添加到订单(ListFragment)的产品。 当用户在网格视图中点击一个产品时,我需要的是显示一个对话框(DialogFragment),在这个对话框中我要求产品的数量。 然后,当用户点击对话框中的接受,我想产品出现在ListFragment。 一方面,我必须将对象产品传递给对话框,以便将其名称显示为对话框的标题(例如)。 所以我做的就是这样通过: public static class ProductDialog extends DialogFragment { static ProductDialog newInstance(ProductVO product) { ProductDialog f = new ProductDialog(); Bundle args = new Bundle(); args.putSerializable("product", product); f.setArguments(args); return f; } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { ProductVO product = (ProductVO) getArguments().getSerializable("product"); return new AlertDialog.Builder(getActivity()) .setIcon(R.drawable.ic_dialog_add) .setTitle(R.string.add_product) … .setPositiveButton(R.string.accept, new DialogInterface.OnClickListener() { public […]