Articles of android fragments

Android非UI片段的用法

我正在浏览Fragments上的Android文档 。 定义片段UI的布局可以在Activity的布局中定义,也可以在单独的.xml文件中定义,或根本不定义。 根据文件 您还可以使用片段为活动提供背景行为,而无需呈现额外的UI。 为什么我需要使用另一个片段来为Activity添加function,而不是在Activity中定义更多的function? 这样的非UI片段只是为了模块化吗? 采用这种方法还有另外一个原因吗? 我将不胜感激一个适合使用非UI片段的例子。 预先感谢您的帮助。

在我的应用程序禁用多手指触摸

我的应用程序使用一个活动来承载几个片段。 每次在手机屏幕上显示一个片段。每个片段的视图由多个图像图标组成。 目前,用户可以用两个手指同时按下两个图标(每个图标按一个图标)。 我想在我的应用上禁用此多点触控function ,以便一次只允许一个图标按下生效 。 我尝试了以下方法: 方式1:在我的应用主题中,我补充道: <item name="android:windowEnableSplitTouch">false</item> 方式2:在Android Manifest xml中,我添加了: <uses-feature android:name="android.hardware.touchscreen.multitouch" android:required="false" /> 方式三:在我的活动中: @Override public boolean onTouchEvent(MotionEvent event) { if(event.getPointerCount() > 1) { System.out.println("Multitouch detected!"); return true; } else return super.onTouchEvent(event); } 不幸的是,我的解决scheme都没有工作 那么, 如何禁用我的应用程序中的多点触控function ?

Android – ListView中的延迟点击

我在我的应用程序中有以下结构: FragmentActivity与ViewPager持有多个片段由FragmentStatePagerAdapterpipe理与Android 2.1的兼容性包 每个片段都包含ListView 。 ListView中的每个元素都有一个带有两个TextViews和一个Button的LinearLayout 。 LinearLayout和button有onClickListeners (分开)。 点击LinearLayout开始另一个Activity 。 我注意到,点击行为是非常不一致的:有时行动立即执行,但很多时候它被延迟,有时甚至被忽略,无论我点击多less次。 它变得更加怪异,因为我可以点击,只有当我开始滚动列表时才会执行该动作。 我尝试了setFocusable(false)和setSelectable(true)各种组合,但似乎没有任何区别。 有任何想法吗? 我会很乐意提供更多的细节。

使用片段事务发送包

这是我的代码不工作: //这样发送包: String topUser = String.valueOf(scores.get(arg2)); Bundle data = new Bundle(); data.putString("userprofile", topUser); FragmentTransaction t = getActivity().getSupportFragmentManager() .beginTransaction(); SherlockListFragment mFrag = new ProfileFragment(); mFrag.setArguments(data); t.replace(R.id.main_frag, mFrag); t.commit(); //以这种方式获取: Bundle extras = getActivity().getIntent().getExtras(); userName = extras.getString("userprofile"); 基本上,数据没有收到。 我在正确的轨道上还是有更好的方法来做到这一点?

切换到新片段时奇怪的logcat错误

我没有遇到像这样的堆栈跟踪。 这是特别奇怪的,因为我只能得到debugging时抛出的错误。 (在没有debugging的情况下运行应用程序不会产生这个错误)。 这发生在从我的抽屉里select一个特定的页面。 我刚刚从活动切换到片段,我可能没有正确处理我的片段交易。 我将不胜感激任何input! 谢谢很多家伙,节日快乐! 这是堆栈跟踪: Process: com.kohlerbear.whowascnscalc, PID: 2415 java.lang.NullPointerException: Attempt to read from field 'boolean android.support.v4.app.BackStackRecord.mAddToBackStack' on a null object reference at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:685) at android.support.v4.app.FragmentManagerImpl.execPeerrorndingActions(FragmentManager.java:1479) at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:447) at android.os.Handler.handleCallback(Handler.java:740) at android.os.Handler.dispatchMessage(Handler.java:104) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:5223) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 这里是我如何处理我的碎片变化(不知道这是否是问题,只是由痕迹提到的背后的事实来判断)。 无论我是否调用ft.addToBackStack(null) ,该应用程序崩溃(再次,只有在debugging时ft.addToBackStack(null) 。 Fragment frag = […]

片段addToBackStack()和popBackStackImmediate()不起作用

我目前正在构buildAndroid应用程序(14 <= SDK <= 21)通过使用一个ActionBarActivity和更多Fragments ,如ListFragment和MapFragment ,在一个FrameLayout视图内交换。 ActionBarActivity会自动replace/提交A片段。然后,当用户点击一个button时,托pipeActivity将replace/提交一个新的不同的片段B.我的目标是让用户在按下后退button后立即返回片段A 。 一些代码现在。 主要活动 public class MainActivity extends ActionBarActivity implements StopFragment.OnFragmentInteractionListener, StopItemFragment.OnFragmentInteractionListener { … @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); fragmentManager = getFragmentManager(); fragmentManager.enableDebugLogging(true); … if (fragmentManager.findFragmentById(R.id.content_frame) == null) { StopItemFragment list = StopItemFragment.newInstance(null); //A – extends ListFragment fragmentManager.beginTransaction() .replace(R.id.content_frame, list) .addToBackStack(null) .commit(); } … @Override […]

setAdapter“调用需要API级别11(当前最less8):android.widget.AbsListView#setAdapter”?

我在扩展Fragment的类中调用setAdapter()方法。 请注意,我已经导入android.support.v4.app.Fragment 。 不过,我收到一个错误,说明API级别必须是级别11。 我该怎么做,以便我可以解决这个问题,而不需要将minSdkVersion="8"更改为minSdkVersion="11" package foo.bar.qux; import java.util.Calendar; import java.util.Date; import org.w3c.dom.Document; import org.w3c.dom.NodeList; import android.support.v4.app.Fragment; import android.app.Activity; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; public class TabFragmentList extends Fragment { String category, xml; NodeList nodes; int numResults; private ListView lv; Date date; @Override public View onCreateView(LayoutInflater […]

使用片段共享转换时,返回转换无法正常工作

我有2个片段ListMovieFragment和ListMovieFragment 。 我有一个在MainActivity实现的ListMovieFragment中的接口。 我正在使用共享元素转换; 当我点击ListMovieFragment的图像视图时,在MainActivity调用onMovieSelected 。 从ListMovieFragment转换工作。 但是当我点击后退button时,从DetailMovieFragment转换到ListMovieFragment失败。 这是MainActivity。 我想我得到了一个不正确的组合来设置片段的转换。 public class MainActivity extends AppCompatActivity implements ListMovieFragment.MovieSelectedListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if(savedInstanceState == null) { ListMovieFragment listMovieFragment = new ListMovieFragment(); FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); fragmentTransaction.add(R.id.activity_main, listMovieFragment, ListMovieFragment.TAG); fragmentTransaction.commit(); } } @Override public void onMovieSelected(int movieId) { DetailMovieFragment detailMovieFragment = (DetailMovieFragment)getSupportFragmentManager().findFragmentByTag(DetailMovieFragment.TAG); […]

fragmentTransaction.add和fragmentTransaction.replace之间的区别

我已经知道的是: 在fragmentTransaction.replace() ,当前片段的onStop()函数将被调用,而fragmentTransaction.add()不会。 并在调用fragMgr.popBackStack(); ,无论使用fragmentTransaction.replace还是fragmentTransaction.add() ,我们都会返回到上一个片段 那么fragmentTransaction.replace做什么的? 我可以理解,我们可以通过popBackStack()函数“添加”前一个片段的opon片段,然后返回到前一个片段,但是: 如果前一个片段被当前片段“replace” ,我猜想前一个片段被删除,并且当前片段被添加,当popBackStack()被调用时,它怎么能返回到前一个片段呢?

popBackStack()和replace()操作如何区别?

在pipe理碎片时,我在应用程序中遇到了一些奇怪的行为,我想知道是否可以帮助解释为什么发生这种情况。 我有两个片段,我们将它们称为片段A和片段B.我的应用程序的一般stream程是,当用户以某种方式与片段A交互时,通过调用fragmentTransaction.replace()显示片段B(这发生在所有情况)。 当我显示片段B时,我将片段A添加到后端堆栈; 然后,当用户按下片段B上的后退button时,片段A通过从后退栈中popup而再次显示。 这一切都很好,但今天我发现有一个来自片段B的stream,它调用fragmentTransaction.replace() ,用片段A的相同实例replace片段B,片段A当前位于后端堆栈中。 本身并没有什么错,但是当我从片段A返回到片段B时出现了奇怪的行为。如果我调用fragmentTransaction.replace() ,片段B的onCreate()方法不会被调用。 但是,如果我从后端堆栈中popup碎片A,然后用碎片Breplace它,则会激发碎片B的onCreate()方法。 为什么是这样? 请注意,Fragment A和Fragment B的所有实例都是在其主机Activity启动时创build的。 编辑澄清。 第二次调用onCreate()的情况如下:附加Fragment A =>用Fragment Breplace,将Fragment Ajoin到后面的栈中=> pop使用popBackStack() => Fragment A再次用碎片BreplaceFragment A 。