Tag: android fragments

如何实现一个ViewPager与不同的碎片/布局

当我开始一个实现viewpager的活动时,viewpager创build了各种片段。 我想为每个片段使用不同的布局,但问题是,viewpager只显示最大的两个布局(1之后的所有剩余片段的第二个布局)。 以下是实现viewpager的SwipeActivity的代码: public class SwipeActivity extends FragmentActivity { MyPageAdapter pageAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_swipe); pageAdapter = new MyPageAdapter(getSupportFragmentManager()); ViewPager pager=(ViewPager)findViewById(R.id.pager); pager.setAdapter(pageAdapter); ActionBar bar = getActionBar(); bar.setDisplayHomeAsUpEnabled(true); } /** * Custom Page adapter */ private class MyPageAdapter extends FragmentPagerAdapter { public MyPageAdapter(FragmentManager fm) { super(fm); } @Override public int getCount() { […]

在片段与其容器活动之间传递数据

如何在一个片段和它的容器活动之间传递数据? 是否有类似于通过意图在活动之间传递数据? 我读了这个,但没有多大帮助: http://developer.android.com/guide/topics/fundamentals/fragments.html#CommunicatingWithActivity

一劳永逸,如何正确保存Fragments的实例状态到后退栈?

我在SO上发现了许多类似问题的实例,但不幸的是,没有答案满足我的要求。 我有不同的肖像和风景布局,我正在使用回栈,这阻止我使用setRetainState()和技巧使用configuration更改例程。 我在TextView中向用户显示了一些信息,这些信息并没有保存在默认处理程序中。 当单独使用活动编写我的应用程序时,以下运作良好: TextView vstup; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.whatever); vstup = (TextView)findViewById(R.id.whatever); /* (…) */ } @Override public void onSaveInstanceState(Bundle state) { super.onSaveInstanceState(state); state.putCharSequence(App.VSTUP, vstup.getText()); } @Override public void onRestoreInstanceState(Bundle state) { super.onRestoreInstanceState(state); vstup.setText(state.getCharSequence(App.VSTUP)); } 使用Fragment ,这只适用于非常特殊的情况。 具体来说,什么是可怕的更换碎片,把它放在后面的堆栈,然后旋转屏幕,而新的片段显示。 根据我的理解,旧的片段在被replace时不会接收到对onSaveInstanceState()的调用,而是保持以某种方式链接到Activity并且当它的View不再存在时调用此方法,所以查找我的任何TextView的结果变成一个NullPointerException 。 另外,我发现保留对TextViews的引用对于Fragment s来说并不是一个好主意,即使对于Activity来说也是如此。 在这种情况下, onSaveInstanceState()实际上保存了状态,但是如果在隐藏片段时旋转屏幕两次 ,问题就会重新出现,因为onCreateView()在新实例中不会被调用。 我想将onDestroyView()的状态保存到一些Bundletypes的类成员元素(它实际上是更多的数据,不只是一个TextView ),并保存在onSaveInstanceState()但还有其他的缺点。 主要是,如果片段当前显示,调用这两个函数的顺序是相反的,所以我需要考虑两种不同的情况。 必须有一个更清洁和正确的解决scheme!

从ViewPager中检索一个片段

我使用一个ViewPager与一个FragmentStatePagerAdapter来承载三个不同的片段: [片段1] [Fragment2] [Fragment3] 当我想从Fragment1中的ViewPager获取FragmentActivity 。 有什么问题,我该如何解决?

onActivityResult不在Fragment中调用

托pipe此片段的活动在相机活动返回时调用onActivityResult 。 我的片段开始一个活动的结果与意图发送给相机拍照。 图片应用程序加载正常,拍照,并返回。 然而, onActivityResult从来没有被击中。 我设置了断点,但没有任何触发。 片段是否有onActivityResult ? 我会这么想,因为这是一个提供的function。 为什么这不被触发? ImageView myImage = (ImageView)inflatedView.findViewById(R.id.image); myImage.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(cameraIntent, 1888); } }); @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if( requestCode == 1888 ) { Bitmap photo = (Bitmap) data.getExtras().get("data"); ((ImageView)inflatedView.findViewById(R.id.image)).setImageBitmap(photo); […]

实例化新的Android Fragment的最佳做法

我已经看到了两个通用实践来在应用程序中实例化一个新的片段: Fragment newFragment = new MyFragment(); 和 Fragment newFragment = MyFragment.newInstance(); 第二个选项使用静态方法newInstance() , 通常包含以下方法。 public static Fragment newInstance() { MyFragment myFragment = new MyFragment(); return myFragment; } 起初,我认为主要的好处是,我可以重载newInstance()方法来创build一个Fragment的新实例时的灵活性 – 但是我也可以通过为Fragment创build一个重载的构造函数来实现。 我错过了什么? 一种方法比另一种方法有什么好处? 或者这只是一个好习惯?

NullPointerException在onCreate()中访问视图

这是经常在StackOverflow上发布的问题的一个规范问题。 我正在学习一个教程。 我已经使用向导创build了一个新的活动。 当我尝试在我的activity onCreate()方法中调用findViewById()方法获得的View的方法时,我得到NullPointerException 。 Activity onCreate() : @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); View something = findViewById(R.id.something); something.setOnClickListener(new View.OnClickListener() { … }); // NPE HERE if (savedInstanceState == null) { getSupportFragmentManager().beginTransaction() .add(R.id.container, new PlaceholderFragment()).commit(); } } 布局XML( fragment_main.xml ): <RelativeLayout 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" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="packagename.MainActivity$PlaceholderFragment" > <View […]

Android – android.view.InflateException:二进制XML文件行#8:错误膨胀类的片段

我正在开发一个应用程序使用NavigationDrawer即DrawerLayout和导航到不同的Fragments 。 当我调用Map_Fragment_Page ,应用程序崩溃,但不是第一次。 它第一次正确显示Map ,但之后,当我导航不同的片段,再次来到Map_Fragment_Page然后崩溃给出一个错误android.view.InflateException: Binary XML file line #8: Error inflating class fragment 我尝试了很多不同的解决方案,我也在Google搜索,但仍然没有得到所需的解决方案。 问题还没有解决。 howtoreach.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <fragment android:id="@+id/howtoreach_map" android:layout_width="match_parent" android:layout_height="match_parent" class="com.google.android.gms.maps.SupportMapFragment"/> </RelativeLayout> HowToReach.java package com.demo.map.howtoreach; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import android.support.v4.app.Fragment; import com.google.android.gms.maps.SupportMapFragment; import com.google.android.gms.maps.MapFragment; import com.google.android.gms.maps.model.BitmapDescriptorFactory; import com.google.android.gms.maps.model.CameraPosition; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.Marker; import com.google.android.gms.maps.model.MarkerOptions; […]

Android Activity ClassNotFoundException – 尝试了一切

我刚刚重构了一个应用程序到一个框架库和一个应用程序,但现在当我尝试在模拟器中启动应用程序,我得到以下错误堆栈跟踪: 06-02 18:22:35.529: E/AndroidRuntime(586): FATAL EXCEPTION: main 06-02 18:22:35.529: E/AndroidRuntime(586): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.matthewrathbone.eastersays/com.matthewrathbone.eastersays.EasterSimonSaysActivity}: java.lang.ClassNotFoundException: com.matthewrathbone.eastersays.EasterSimonSaysActivity in loader dalvik.system.PathClassLoader[/data/app/com.matthewrathbone.eastersays-1.apk] 06-02 18:22:35.529: E/AndroidRuntime(586): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2585) 06-02 18:22:35.529: E/AndroidRuntime(586): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 06-02 18:22:35.529: E/AndroidRuntime(586): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 06-02 18:22:35.529: E/AndroidRuntime(586): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 06-02 18:22:35.529: E/AndroidRuntime(586): at android.os.Handler.dispatchMessage(Handler.java:99) 06-02 18:22:35.529: E/AndroidRuntime(586): at android.os.Looper.loop(Looper.java:123) 06-02 18:22:35.529: E/AndroidRuntime(586): at […]

如何实现OnFragmentInteractionListener

我有一个向导生成的应用程序与导航抽屉在Android Studio 0.8.2 我创建了一个片段,并添加newInstance(),我得到这个错误: com.domain.myapp E / AndroidRuntime:致命例外:主 java.lang.ClassCastException: com.domain.myapp.MainActivity@422fb8f0 必须实现OnFragmentInteractionListener 我无法找到任何地方如何实现这个OnFragmentInteractionListener? 即使在android sdk文档中也找不到它! MainActivity.java import android.app.Activity; import android.app.ActionBar; import android.app.Fragment; import android.app.FragmentManager; import android.os.Bundle; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.support.v4.widget.DrawerLayout; public class MainActivity extends Activity implements NavigationDrawerFragment.NavigationDrawerCallbacks { /** * Fragment managing the behaviors, interactions and presentation of […]