Articles of android fragments

从ActionBar选项卡获取当前片段

我有两个片段(Fragment1和Fragment2),使用自定义TabListener类创建ActionBar导航。 每个标签的内容都是我的一个片段。 但现在我有一个问题 – 我无法访问/获取片段的实例。 public void onCreate( Bundle savedInstanceState ) { super.onCreate( savedInstanceState ); getSupportActionBar().setNavigationMode( getSupportActionBar().NAVIGATION_MODE_TABS ); Tab tab = getSupportActionBar().newTab() .setText( R.string.frag1 ) .setTabListener( new MyTabListener( this, Fragment1.class.getName() ) ); getSupportActionBar().addTab( tab ); tab = getSupportActionBar().newTab() .setText( R.string.frag2 ) .setTabListener( new MyTabListener( this, Fragment2.class.getName() ) ); getSupportActionBar().addTab( tab ); Fragment1 f1 = (Fragment1) […]

儿童片段被破坏没有充分的理由

信息:我在ParentFragment有一个2窗格布局(2个子Fragments ),当然,它位于FragmentActivity 。 我在setRetainInstance(true)上有setRetainInstance(true) 。 在方向更改时, 左子片段不会被销毁( onCreate()不会被调用),这是正常的(因为父节点保留其实例)。 问题:在方向改变时, 正确的片段被破坏( onCreate()被调用)。 为什么地狱是正确的片段被破坏而左边的片段不是? 编辑:如果我删除setRetainInstance(true) ,则左侧片段的onCreate()被调用两次 (lol wtf), 右侧片段的onCreate()被调用一次。 所以这也不好…… ParentFragment的代码如下: @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setRetainInstance(true); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_schedule, container, false); setHasOptionsMenu(true); if (getChildFragmentManager().findFragmentById(R.id.fragment_schedule_framelayout_left) == null || !getChildFragmentManager().findFragmentById(R.id.fragment_schedule_framelayout_left).isInLayout()) { if (mPresentationsListFragment == […]

使用新工具栏组件,隐藏和显示导航抽屉图标,Home Up图标单击事件片段中的问题

我最近开始更新我的应用程序,以使用带有导航抽屉的Android 5.0中引入的新工具栏组件。 应用程序的流程是:MainActivity有一个工具栏,带菜单的导航抽屉1.主页2.购物车。 主菜单通过其中的按钮导航到“主页详细信息”。 “MainActivity”的布局: 我在从抽屉中选择的菜单上的“MainActivity”上添加两个片段HomeFragment,CartFragment,默认选择是位置0即“Home” class“MainActivity.java”:: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTitle = mDrawerTitle = getTitle(); drawer = (DrawerLayout) findViewById(R.id.drawer); mToolbar = (Toolbar) findViewById(R.id.toolbar); tvTitle = (TextView) mToolbar.findViewById(R.id.toolbar_title); if (mToolbar != null) { setSupportActionBar(mToolbar); } mDrawerToggle = new ActionBarDrawerToggle(this, drawer,mToolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close) { public void onDrawerClosed(View view) { getSupportActionBar().setTitle(mTitle); } public […]

使用FragmentStatePagerAdapter在ViewPager的两侧动态添加片段

在我的一个应用程序中,我需要在ViewPager的两侧添加Fragments。 首先,我将获得5个Feed的常量,我的ViewPager将在索引2处显示feed,即我当前显示的Fragment将包含索引2处的数据。因此,总体而言,我的ViewPager将在开始时显示5个Feed的中心只需将ViewPager当前项设置为2就可以实现 viewPager.setCurrentItem(2); 现在用户可以滑动两边,当他从中心位置向左滑动时,我会查找下一个Feed,即从服务器获取并在我的ViewPager的零索引处添加Feed,就像这样 feedsList.add(0, modelClassObject); // feedsList will contain all feeds and has been used by adapter to show data in fragments. adapter.notifyDataSetChanged(); 当我从中心位置向右滑动时,我会在最后添加Feed,就像这样 feedsList.add(modelClassObject); adapter.notifyDataSetChanged(); 现在的问题是,如果我只在右侧添加Feed,即在feedsList的末尾,一切正常,但是当我在零索引处添加Feed时出现问题。 我的适配器没有显示已添加到零位置的新Feed,而是重复现有Feed中的一个,而右侧但不是左侧。 我已经尝试了一切,但没有什么是正确的。 这是我的适配器代码。 private class HorizontalPagerAdapter extends FragmentStatePagerAdapter { public HorizontalPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int arg0) { return FeedUserProfileFragment.newInstance(feedsList.get(arg0), arg0); } @Override public […]

FragmentMap + ActionBar选项卡

我一直在尝试将MapView插入ActionBar Tab ,但即使是谷歌搜索我也无法解决问题。 这是主要活动: @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //setContentView(R.layout.action_bar_tabs); FragmentManager fm = getSupportFragmentManager(); fm.beginTransaction().add(android.R.id.content, GigLoader.GigLoaderListFragment.newInstance()).commit(); getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); ActionBar.Tab tab1 = getSupportActionBar().newTab().setText(“Geo”).setTabListener(this); ActionBar.Tab tab2 = getSupportActionBar().newTab().setText(“Lista”).setTabListener(this); getSupportActionBar().addTab(tab1); getSupportActionBar().addTab(tab2); } @Override public void onTabSelected(Tab tab, FragmentTransaction ft) { if (tab.getPosition() == 0) { fm.beginTransaction().add(android.R.id.content, GigLoader.GigLoaderListFragment.newInstance()).commit(); } else { fm.beginTransaction().add(android.R.id.content, GeoGigLoader.GeoGigMapFragment.newInstance()).commit(); } } 这里是GeoGigLoader的代码: public class […]

访问片段后台任务中的资源通常会返回illegalStateException

我正在进行异步网络请求以获取评论和预告片。 如果存在评论和预告片,则将它们设置为TextView文本。 如果没有评论,那么我将textview测试设置为“无评论”(message_no_reviews) ,这是strings.xml文件中的预定义字符串variables。 现在,为了在没有评论可用时显示该文本,我正在使用 getResources().getString(R.string.message_no_reviews) 问题是调用getResources().getString(R.string.message_no_reviews)返回java.lang.IllegalStateException: Fragment MovieDetailFragment{1fdfd76} not attached to Activity多次java.lang.IllegalStateException: Fragment MovieDetailFragment{1fdfd76} not attached to Activity ,而是调用getResources().getString(R.string.api_key)不会导致任何exception。 以下是代码段。 public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); getReviews(); getTrailers(); } public void getReviews(){ Call getReviewsCall = apiService.getReview(movie.getId(),getResources().getString(R.string.api_key)); getReviewsCall.enqueue(new Callback() { @Override public void onResponse(Response response, Retrofit retrofit) { if (response.body() != null) { JsonArray […]

什么时候提交FragmentTransaction是安全的?

根据文件 片段事务只能在活动保存其状态之前创建/提交。 如果您尝试在Activity.onSaveInstanceState()之后(以及之后的Activity.onStart或Activity.onResume()之前提交事务,则会收到错误。 我可以理解片段事务在Activity.onSaveInstanceState()之后无法提交的第一部分,因为如果需要恢复活动,则提交后的状态可能会丢失。 但我不明白为什么我们不能在Activity.onStart或Activity.onResume()之前提交片段事务? Oncreate()也在Activity.onStart或Activity.onResume()之前。这是否意味着我们甚至无法在oncreate()中提交它?

在片段里面的Viewpageindicator

使用SherlockActionBar,我创建了一个很好的界面。 在横向模式下,您会看到listfragment和“detailsfragment”。 现在我想在详细信息框架中添加一个viewpageindicator( https://github.com/JakeWharton/Android-ViewPagerIndicator ),所以我看起来像这样: ————————–| |_1___|TAB1 | TAB2 | ETC | |_2___|——————-| |_3___|Example: content | |_4___| TAB1 of listitem 1| |_5___|___________________| 我希望这很清楚。 所以基本上我会在片段内部使用FragmentManager / TabPageIndicator。 我这可能吗? 我想不出来.. 🙁 谢谢!

Android片段必须是静态的

我有这个错误,但我不知道如何解决这个错误。 错误:片段应该是静态的,以便系统可以重新实例化,并且匿名类不是静态的[ValidFragment] 如果你知道如何解决,请帮助我 这是MainActivity.java import android.annotation.TargetApi; import android.app.ProgressDialog; import android.content.BroadcastReceiver; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.IntentFilter; import android.content.SharedPreferences; import android.content.res.ColorStateList; import android.content.res.Configuration; import android.graphics.Color; import android.os.Build; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.NavigationView; import android.support.design.widget.Snackbar; import android.support.design.widget.TabLayout; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.content.LocalBroadcastManager; import android.support.v4.view.GravityCompat; import android.support.v4.view.ViewPager; import android.support.v4.widget.DrawerLayout; import […]

如何调用onCreateView方法或刷新我的片段?

我想在下面的代码中刷新或调用onCreateView。 我有一个上下文菜单删除一个项目,之后我想用新项目刷新片段..谢谢! public class ItemDetailFragmentBlackBoard extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { …. return rootView; } } /** Menu on LongClick */ @Override public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); menu.setHeaderTitle(“Context Menu”); menu.add(0, v.getId(), 0, “Delete”); } @Override public boolean onContextItemSelected(MenuItem item) { if(item.getTitle()==”Delete”){ String status=””; […]