Articles of android fragments

Android的线程池策略,可以用Loader来实现吗?

首先是问题: 我正在使用定制的FragmentStatePagerAdapter中使用多个FragmentLists的应用程序。 可能有这样的碎片数量可能在20到40之间。 每个片段都是一个列表,其中每个项目可以包含文本或图像。 这些图像需要从网上asynchronous上传,并caching到临时内存caching中,如果可用,也将caching到SD中 当片段离开屏幕时,任何上传和当前活动应该被取消(不被暂停) 我的第一个实现是遵循Google着名的图像加载器代码 。 我的代码的问题是它基本上创build一个AsyncTask每个图像的实例。 在我的情况下杀死真正快速的应用程序。 由于我使用v4兼容包,我认为使用扩展AsyncTaskLoader自定义Loader会帮助我,因为它内部实现了一个线程池。 但是,如果我多次执行这个代码,每个后面的调用都会中断前一个,那么令我不愉快的意外。 说我有我的ListView#getView方法: getSupportLoaderManager().restartLoader(0, args, listener); 这个方法在循环中为每个进入视图的列表项执行。 正如我所说 – 每个以下的调用将终止前一个。 或者至less这是根据LogCat发生的事情 11-03 13:33:34.910: V/LoaderManager(14313): restartLoader in LoaderManager: args=Bundle[{URL=http://img.androidcookie.com/android/pm.png}] 11-03 13:33:34.920: V/LoaderManager(14313): Removing pending loader: LoaderInfo{405d44c0 #2147483647 : ImageLoader{405118a8}} 11-03 13:33:34.920: V/LoaderManager(14313): Destroying: LoaderInfo{405d44c0 #2147483647 : ImageLoader{405118a8}} 11-03 13:33:34.920: V/LoaderManager(14313): Enqueuing as new pending loader 然后我想,也许给每个加载器的唯一ID将有助于事情,但它似乎没有任何区别。 […]

非常基本的actionbarsherlock选项卡的片段:FragmentTransaction在null onTabSelected()方法

我正在实现一些代码(http://arvid-g.de/12/android-4-actionbar-with-tabs-example),并试图将其转换为ActionBarSherlock。 这里是TabActivity.java: package com.pnet; import com.actionbarsherlock.app.ActionBar; import com.actionbarsherlock.app.ActionBar.Tab; import com.actionbarsherlock.app.SherlockActivity; import android.content.Context; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentTransaction; import android.util.Log; import android.widget.Toast; public class TabActivity extends SherlockActivity { private static String TAG = "TabActivity"; public static Context appContext; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.tab_activity); […]

停止使用支持库的Android Studio

我试图让Android Studio中的Android项目不使用支持库。 我的问题是,当我使用片段,期待支持碎片,并导致应用程序崩溃。 我的最小SDK是14,我的目标SDK是19.我的理解是,因为我针对这些版本,我不应该需要支持库。 如我错了请纠正我。 我想纠正这个错误java.lang.ClassCastException: com.google.android.gms.maps.MapFragment cannot be cast to android.support.v4.app.Fragment 。 而且我知道我可以通过使用SupportMapFragment来修复它。 但我不想这样做。 我想使用常规的MapFragment 所以我的主要问题是如何让它停止期待支持库碎片,只是使用正则片段。 我也有这个问题与其他片段不只是地图。

圆形的碎片在仿真器/手表上变成黑色的佩戴手表

我的Android Wear圆形手表上有一个黑色的屏幕(正方形)。 在Android Studio布局devise中,两种布局都显示正常。 项目testing: https://bitbucket.org/powder366/motoblack 我使用下面的代码: public class MyFragment extends Fragment { … @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View contentView = inflater.inflate(R.layout.my_fragment, container, false); … 布局my_fragment: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/my_fragment" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:keepScreenOn="true" tools:context=".WearFragment"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:id="@+id/text1" android:text="Hi1" android:layout_gravity="center_horizontal" style="@style/UnitsStyle"/> <TextView android:id="@+id/text2" android:text="Hi2" android:layout_gravity="center_horizontal" style="@style/BaseStyle"/> […]

debugging时,Android findFragmentByTag返回null

背景: 我正在编写一个Android应用程序,其中一个活动可以由多个片段之一填充。 相对来说,我需要将一束数据传递给活动片段,以便相应地更新UI。 为了得到当前片段,我调用了getfragmentManager().findFragmentByTag()并将返回的片段转换为我的自定义片段类。 问题: 上述方法通常工作正常。 但是, findFragmentByTag()偶尔会返回null。 经过进一步的调查,我得出的结论是,这只会发生在我从Android工作室运行或debugging(即使不是每次都发生)。 相关编码: protected void onCreate(Bundle savedInstanceState){ //Do lots of stuff currentFragmentTag = ""; getFragmentManager().addOnBackStackChangedListener( new FragmentManager.OnBackStackChangedListener() { public void onBackStackChanged() { if (getFragmentManager().getBackStackEntryCount() > 0) { currentFragmentTag = getFragmentManager().getBackStackEntryAt(getFragmentManager().getBackStackEntryCount() – 1).getName(); } } }); init(); //Do some more stuff //this should always be the case if (currentFragmentTag.equals(LOGIN_FRAGMENT_TAG)) […]

Android的; 切换选项卡时片段重叠

首先,谢谢你们这个伟大的社区。 我正试图遵循支持演示示例代码来实现Tabbed-fragment接口。 顶级,我试图实现两个选项卡,将每个选项卡关联一个片段,并相应地select每个选项卡时,出现片段。 目前,我有两个问题(但我相信他们是相关的…) 1) 每个选项卡的片段相互重叠。 这可能与不正确的片段连接/分离有关。 2) 第三个神秘片段正在创build,并与其他片段重叠 在模拟器上(和物理设备上),当select任一选项卡时,可以看到有两个片段重叠 当selecttab1时,片段1和未知片段重叠。 当selecttab2时,片段1和片段2重叠。 链接到截图(没有足够的声誉来上传照片…) (tab1重叠) http://img.androidcookie.com/android/tab1_overlapping.png (tab2重叠) http://img.androidcookie.com/android/tab2_overlapping.png 在这里,为了演示/清晰的目的,我已经分开了每个片段中的文本。 这些截图的链接在我的评论/回复中。 (没有足够的声誉上传超过2个链接…) 活动布局(fragment_tabs.xml) <TabHost xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/tabhost" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TabWidget android:id="@android:id/tabs" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="0"/> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="0dp" android:layout_height="0dp" android:layout_weight="0"/> <FrameLayout android:id="@+id/realtabcontent" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"/> </LinearLayout> </TabHost> 源代码 public class TabbedInfoHome extends SherlockFragmentActivity { […]

Android – 如何dynamic更改片段布局

我有一个显示我公司数据的片段应用程序。 我想改变我的布局dynamic屏幕方向,而即时通讯页面上,但我还没有find如何。 如果有人得到解决scheme,提前致谢

Fragment中的上下文菜单使用来自不同Fragment的ListView:registerForContextMenu(getListView())

我试图寻找解决scheme,但没有发现任何符合我的情况。 我有一个扩展FragmentActivity的MainActivity和多个ListFragments。 我使用PagerSlidingTabStrip库为slidetabs和ViewPager。 碎片没有XML布局,它们只是ListFragments,它返回一个ListView,所以不需要布局。 这是一个音板应用程序,长按列表项目,允许用户设置一个声音文件作为他们的铃声,通知或报警,或保存到SD卡。 现在,所有的Fragments都可以加载自己的数据。 一切似乎没问题,但是,当我在后台加载的Fragment上使用上下文菜单时,似乎是使用来自之前加载的第一个或上一个片段的Lis​​tView,创build它之前可见的那个片段。 我的意思是说,我的MainActivity开始,它加载FragmentA,并在后台FragmentB也预装。 在onActivityCreated方法中,对于这两个片段,它使用registerForContextMenu(getListView())。 @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); // Data loading etc MyAdapter adapter = new MyAdapter(getActivity(), R.layout.data_row, data); setListAdapter(adapter); registerForContextMenu(getListView()); } 但似乎正在发生的是,FragmentB调用registerForContextMenu(getListView()),它似乎是采取当前活动的ListView,这是FragmentA的列表。 所以说,我select从上下文菜单中保存一个文件。 我长按FragmentB的第一项,但它试图保存FragmentA的第一项。 如果我只点击列表项,就会像期望的那样播放它自己的声音,但上下文菜单命令使用预载的时候可见的片段列表。 这是onCreateContextMenu。 请注意,此时它使用上下文菜单标题中的正确的项目标题。 @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)menuInfo; menu.setHeaderTitle(data.get(info.position).getDataName()); MenuInflater […]

在添加/replace片段中的任何代码改进

我已经开始研究Kotlin,不知道这门语言的所有function。 该函数用于在FrameLayout中显示片段。 逻辑是这样的,它第一次应该总是add()片段,下次它会replace() 。 另外在某些情况下,我需要使用addToBackStack() ,并在相同的情况下禁用左侧菜单。 fun showFragment(fragment : Fragment, isReplace: Boolean = true, backStackTag: String? = null, isEnabled: Boolean = true) { /* Defining fragment transaction */ val fragmentTransaction = supportFragmentManager .beginTransaction() /* Select if to replace or add a fragment */ if(isReplace) fragmentTransaction.replace(R.id.frameLayoutContent, fragment, backStackTag) else fragmentTransaction.add(R.id.frameLayoutContent, fragment) /* Select if to add […]

无法从FrameLayout中删除片段?

我有一个横向模式的布局,左侧显示一个ListView,右侧显示一个FrameLayout。 当从列表中select一个项目时,另一个片段被添加到FrameLayout MyFragment myFragment = (MyFragment) fragmentManager.findFragmentById(R.id.myFrameLayout); FragmentTransaction ft = fragmentManager.beginTransaction(); if (myFragment == null) { myFragment = new MyFragment(uri); ft.replace(R.id.myFrameLayout, playerFragment); ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); ft.commitAllowingStateLoss(); } 后来我按列表视图中的删除,并删除列表中的最后一项,我试图删除片段,以便什么都没有显示,但它不起作用,我的片段仍然在屏幕上。 删除的代码是: MyFragment myFragment = (MyFragment) fragmentManager.findFragmentById(R.id.myFrameLayout); FragmentTransaction ft = fragmentManager.beginTransaction(); ft.remove(myFragment); ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_CLOSE); ft.commitAllowingStateLoss(); 任何想法,为什么它不被从视图中删除?