Articles of android fragments

android libvlc多个表面问题

我知道是否可以在同一布局中使用两个表面并同时查看每个表面。 将来我会看一个video视图的网格视图,但每个video视图都使用vlc。 我使用片段修改了这个样本( android-vlc-sample )。 结果是我只看到一个video……我该如何解决? 从log-cat我没有看到重要的错误,但我认为android UIThread存在渲染问题 Java编码 public class MultipleVideoPlayFragmentActivity extends FragmentActivity { public final static String LOCATION = “com.compdigitec.libvlcandroidsample.MultipleVideoPlayFragmentActivity.location”; private static final String TAG = “MediaPlayer”; public String mFilePatha; @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.activity_multiple_video_play_fragment); Intent intent = getIntent(); mFilePatha = intent.getExtras().getString(LOCATION); } public static class VideoFragment extends Fragment implements […]

片段的onOptionsItemSelected不会被调用

我的片段用一个特定的选项替换了父Activity选项,但是当我点击该项时,只有活动的onOptionItemSelected被调用,尽管我已经覆盖了Fragment中的方法。 我错过了什么吗? 片段的方法: @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { Log.d(TAG, “Fragment.onCreateOptionsMenu”); if (mPasteMode) { menu.clear(); inflater.inflate(R.menu.contexual_paste, menu); getActivity().getActionBar().setTitle(“PasteMode”); } super.onCreateOptionsMenu(menu, inflater); } @Override public boolean onOptionsItemSelected(MenuItem item) { Log.d(TAG, “Fragment.onOptionsItemSelected”); switch (item.getItemId()) { case R.id.context_action_paste: Toast.makeText(getActivity(), “It worked “, Toast.LENGTH_SHORT).show(); return true; default: return […]

如何从对话框片段中获取主机片段中的按钮单击

我有一个listFragment,我想在listItemClick上显示DialogFragment(是/否)。 我想在listFragment中取回用户选择(是/否)。 我已经阅读了有关侦听器接口机制但是可以使用activity fragment。 一种方法是: 在包含是/否按钮选择function的对话框片段中定义界面,并在警告对话框正/负按钮单击上调用这些方法。 在Main活动中实现此接口。 在listFragment onItem单击中启动dialogFragment。 在活动中保存用户选择。 通过另一个接口在listFragment中获取此选项,在Main活动中实现。 但是,我们有这个简单任务的简单机制吗? 任何例子或代码?

在片段中使用TabLayout; 标签文字不可见

我目前正在尝试新的Android支持设计库中的各种新组件。 我在MainActivity.java实现了一个NavigationView ,它使用FragmentManager在Navigation抽屉中的项目之间导航: getSupportFragmentManager() .beginTransaction() .replace(R.id.content, mTabLayoutFragment) .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) .commit(); 我在其中一个片段中使用TabLayout 。 这是片段的布局: 它背后的Java代码: import android.os.Bundle; import android.support.design.widget.*; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentStatePagerAdapter; import android.support.v4.view.ViewPager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; public class TabLayoutFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View inflatedView = inflater.inflate(R.layout.fragment_tablayout, container, false); TabLayout tabLayout […]

设置Android片段的自定义字体

我一直在使用Jake Wharton的ViewPagerIndicator ,我正在尝试在我的一个片段上实现自定义字体。 我试过使用这段代码: TextView txt = (TextView) findViewById(R.id.Zipcode); Typeface font = Typeface.createFromAsset(getAssets(), “fonts/customfont.ttf”); txt.setTypeface(font); 在onCreate中,主要活动导致logcat中出现空指针exception,偶尔也会出现typeface cannot be made 。 我还尝试在onCreate和onCreateView中设置片段本身的字体,但是findViewById和getAssests()是片段范围中的未知方法。 我无法弄清楚字体是否是问题,或者我试图设置fn’t是问题所在。

invalidateOptionsMenu在片段中不起作用

我想根据编辑文本中的文本是否显示或隐藏操作栏中的项目 所以我做了以下 public class NounSearch extends android.app.Fragment { EditText seachEditText; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { super.onCreate(savedInstanceState); View rootView = inflater.inflate(R.layout.nounsearchactivity, container, false); //Intiate EditText seachEditText =(EditText) rootView.findViewById(R.id.nounSearch); seachEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if (actionId == EditorInfo.IME_ACTION_SEARCH) { searchResult.Entities = new ArrayList(); _currentPage […]

OnLoadFinished()调用了两次

我想弄清楚我是否在装载机方面做错了。 我正在使用支持库,我有一个片段,在onCreate()中调用initLoader()将其自身设置为LoaderCallbacks,但是在旋转时它会在onLoadFinished()中接收两次结果,一次调用init (并且它已经拥有数据),并且一旦FragmentActivity循环遍历onStart()中的所有Loaders并传递结果,因为它已经拥有数据。 如果我只调用init一次(在第一次启动Fragment时),它不会将自己设置为Loader的回调,因此它根本不会接收对onLoadFinished的调用。 好像onLoadFinished应该只调用一次,因为在onLoadFinished()中可以完成一些昂贵的事情(比如清除列表适配器等),所以我只想弄清楚这是一个bug还是我是只是在错误的时间或其他地方调用init。 任何人都对此问题有任何见解?

Backstack上的Android碎片占用了太多内存

问题: 我有一个Android应用程序,允许用户浏览用户的配置文件ViewProfileFragment 。 在ViewProfileFragment内部,用户可以单击将他带到StoryViewFragment的图像,其中显示各种用户的照片。 可以单击用户配置文件照片,将其带到具有新用户配置文件的另一个ViewProfileFragment实例。 如果用户反复单击用户的配置文件,则单击将图像带到库中的图像,然后单击另一个配置文件,Fragments在内存中快速堆叠,从而导致可怕的OutOfMemoryError 。 这是我描述的图表流程图: UserA点击Bob的个人资料。 在Bob的个人资料中,UserA点击了ImageA,将他带到各个用户(包括Bob’s)的照片库中。 UserA点击Sue的个人资料然后点击她的一个图像 – 处理重复等等。 UserA -> ViewProfileFragment StoryViewFragment -> ViewProfileFragment StoryViewFragment -> ViewProfileFragment 因此,从典型的流程中可以看出, StoryViewFragment和StoryViewFragment在StoryViewFragment堆积了很多实例。 相关代码 我使用以下逻辑将它们作为片段加载: //from MainActivity fm = getSupportFragmentManager(); ft = fm.beginTransaction(); ft.replace(R.id.activity_main_content_fragment, fragment, title); ft.addToBackStack(title); 我做了什么 1)我特意使用FragmentTransaction replace以便在replace发生时触发onPause方法。 在onPause内部我试图释放尽可能多的资源(例如清除ListView适配器中的数据,“清空”variables等),这样当片段不是活动片段并被推到backstack时会有释放更多内存。 但我释放资源的努力只取得了部分成功。 根据MAT,我仍然有很多由GalleryFragment和GalleryFragment消耗的内存。 2)我还删除了对addToBackStack()的调用,但显然这提供了糟糕的用户体验,因为它们无法遍历(当用户点击后退按钮时应用程序才会关闭)。 3)我使用MAT来查找占用大量空间的所有对象,并且我在onPause (和onResume )方法中以各种方式处理这些对象以释放资源,但它们的大小仍然很大。 4)我还在两个片段’ onPause中写了一个for循环,它使用以下逻辑将我的所有ImageViews为null: for (int i=shell.getHeaderViewCount(); i<shell.getCount(); i++) […]

片段 – 您是否必须在包含整个Activity的片段周围使用Activity Wrapper?

考虑来自developers.android.com的示例应用程序 这描述了像这样使用Fragments: 在电话上,您可以在活动A上使用片段1,在活动B上使用片段2。 在平板电脑上你有更多的空间,所以你在活动A上使用片段1和片段2。 大! …但是……在第一个例子(带有电话的那个)你创建了一个带有xml文件的Activity,其中包含一个而这就是你在该xml上只调用setContentView()的活动吗? 这似乎是很多冗余代码(Activity,XML和Fragment来显示片段):你能将Fragment设置为Activity还是一个总是需要XML的包装器?

onAttach(Activity)已弃用:我可以在其中检查活动是否实现了回调接口

在API 23之前,我使用Fragment的onAttach方法来获取我的侦听器实例,然后在onDetach中清理引用。 例如: @Override public void onAttach(Activity activity) { super.onAttach(activity); mListener = null; try { mListener = (SellFragmentListener) activity; } catch (ClassCastException e) { throw new ClassCastException(activity.toString() + ” must implement SellFragmentListener”); } } @Override public void onDetach() { super.onDetach(); mListener = null; } 在onAttach(Context context)中进行相同的检查是否安全,或者有更好的方法来获取持有者活动实例?