Articles of android fragments

在backstack中添加新片段时,onBackStackChanged()调用两次

所以,我注意到有趣的问题。 当我以编程方式添加新片段时,OnBackStackChangedListener中的onBackStackChanged方法被调用两次,但它必须只调用一次。 这是我的活动代码: import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.widget.Button; public class MainActivity extends AppCompatActivity implements FragmentManager.OnBackStackChangedListener{ private FragmentManager fragmentManager; private Button button1; private Button button2; private Button button3; private Fragment defaultFragment; private Fragment previousFragment; private Fragment currentFragment; private String currentFragmentTag; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); […]

Android Fragment getArguments()返回null

正如标题所示。 我从这里下载了Fragment代码, http://developer.android.com/shareables/training/FragmentBasics.zip 。 这是来自Android官方开发者网站的 Fragment示例。 http://developer.android.com/training/basics/fragments/fragment-ui.html 这是MainActivity.java的onCreate() : /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.news_articles); // Check whether the activity is using the layout version with // the fragment_container FrameLayout. If so, we must add the first fragment if (findViewById(R.id.fragment_container) != null) { // […]

ShareActionProvider刷新文本

我有一个EditText,最初填充来自本地数据库的文本。 当用户离开屏幕(onPause)时,更新的文本存储在本地数据库中。 我还有一个ShareActionProvider(使用ActionBarSherlock)。 当用户使用ShareActionProvider时,旧文本将发送到目标应用程序。 当用户按下菜单项时,如何刷新通过actionprovider发送的文本? @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); inflater.inflate(R.menu.share_action_provider, menu); MenuItem actionItem = menu.findItem(R.id.menu_item_share_action_provider_action_bar); mActionProvider = (ShareActionProvider) actionItem.getActionProvider(); mActionProvider.setShareIntent(createShareIntent()); } private Intent createShareIntent() { Intent shareIntent = new Intent(Intent.ACTION_SEND); shareIntent.setType(“text/plain”); shareIntent.putExtra(Intent.EXTRA_TEXT, editText.getText().toString()); return shareIntent; } 当用户按下菜单项时,似乎没有调用onOptionsItemSelected()。 所以我尝试了以下onPause(),没有运气: @Override public void onPause() { super.onPause(); mActionProvider.setShareIntent(createShareIntent()); // save to db: […]

在片段事务期间了解Fragment的lifeCycle方法调用

我创建了一个演示,以了解在片段事务的不同情况下调用所有片段生命周期的方法。虽然大多数调用都是按照期望的,我仍然很困惑,我用Bold编写的。 假设有两个片段A和B,我们正在它们之间执行事务 情况1 将片段B添加到片段A时 getActivity().getSupportFragmentManager().beginTransaction().add(R.id.container, fragementB).addToBackStack(null).commit(); 片段B onAttach 的onCreate onCreateView onActivityCreated 在onStart 的onResume 没有调用Fragment A的生命周期方法。 我的期望是什么? 由于片段A不可见,因此调用片段A的onStop方法 根据文件 – 停止 – 片段不可见。 主机活动已停止或片段已从活动中删除但已添加到后台堆栈。 停止的片段仍然存在(系统保留所有状态和成员信息)。 但是,它不再对用户可见,并且如果活动被杀死将被杀死。 这是否意味着在同一活动中添加新片段时不会调用当前片段的方法? 然后在Fragment B中使用popBackStack() 片段B 在onPause 的onStop onDestroyView 的onDestroy onDetach 没有调用Fragment A的生命周期方法 我的期望是什么? 由于片段A现在可见,因此调用片段A的onStart方法 案例2 当片段B替换片段A时 getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.container, fragementB).commit(); 片段B onAttach 的onCreate onCreateView onActivityCreated 在onStart 的onResume 片段A. 在onPause 的onStop onDestroyView 的onDestroy onDetach […]

ListFragment与ListActivity – 使用哪一个?

有人能告诉我应该使用哪一个? 我的意思是“最佳实践”。 谢谢。

属于Android棒棒糖中不同活动的片段之间的共享元素转换

我在一个属于一个Activity的片段中有一个共享元素。 我想在Android Lollipop中进行共享元素转换,其元素是属于另一个活动的片段的一部分。 可能吗? 我怎样才能做到这一点?

如何使用类名而不是索引来实例化片段类

我有两个名为SessionTab和BillingTab片段类,我正在尝试使用创建这些类的实例 SessionTab sessionTab = (SessionTab) getSupportFragmentManager().getFragments().get(1); 但有时这些类的索引会被反转,然后会导致ClassCastException 如何通过传递类名而不是索引来获取这些片段类的实例,或者以任何方式确保这些类的索引每次都保持不变,因此它不会导致ClassCastException

菜单排序由于片段和活动层次结构而产生的差异。 (onCreateOptionsMenu)

背景 为Android 3.0开发,我有一个HostActivity ,它是NotebooksActivity和NoteActivity的超类。 NotebooksActivity包含一个片段, NotebooksFragment 。 在HostActivity ,我包含一个菜单,我想在ActionBar的选项菜单的最右端显示, 即HostActivity子类中的所有菜单项应该出现在HostActivity添加的菜单项的HostActivity 。 HostActivity菜单通胀: @Override public boolean onCreateOptionsMenu(Menu menu) { final MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.host_menu, menu); return super.onCreateOptionsMenu(menu); } 问题 当我在NoteActivity添加菜单项时,我按预期实现了所需的顺序: @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.notebook_menu, menu); return super.onCreateOptionsMenu(menu); } 但是,当我在NotebooksFragment添加菜单项时,由于Fragments的工作原理,在HostActivity使用相同的方法调用onCreateOptionsMenu , 导致HostActivity的菜单项出现在NotebooksFragment之前。 @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) […]

在FragmentTransaction中使用add()。addToBackStack(),add()。detach()和replace()。addToBackStack()之间有什么区别?

在Android 文档中的 FragmentTransaction项中,描述了方法replace()与为当前视图中添加的所有片段调用方法remove()相同,然后调用方法add() 。 在这种情况下,为了恢复前一个片段,我们可以使用addBackToStack() ,这意味着事务状态仍然由片段管理器管理,并在我们popup堆栈时将反转其操作。 另一方面,当我们使用add()实现事务时,除了使用add().addBackToStack() ,我们可以使用detach()方法并使用attach()恢复片段,它具有与addBackToStack() 。 那么这些场景之间的幕后差异是什么?

我可以在Fragment中注册MVP Presenter吗?

我一直在关注Google提供的MVP设计模式来重构我的应用程序。 我有一个MainActivity和很多片段,对于我来说,为每个片段创建活动似乎很麻烦,所以我一直在考虑在片段中注册演示者。 我所看到的是每个片段都注册了它自己的演示者,但我不确定它有多大的错误…… 🙂 所以这是我的演示者: public class FirstPresenter implements FirstContract.Presenter { private final FirstContract.View mView; public FirstPresenter(FirstContract.View view) { mView = view; } @Override public void start() { Log.e(TAG, “Start”); } } 这是我的碎片: public class FirstFragment extends Fragment implements FirstContract.View { private FirstContract.Presenter mPresenter; @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container , Bundle savedInstanceState) […]