相关疑难解决方法(0)

Android:检查片段是否可见

我有一个FragmentActivity,一些片段和一个在后台运行的服务.如果特定片段可见,可以从服务中检查?

android

25
推荐指数
3
解决办法
6万
查看次数

检查片段当前是否可见

我知道StackOverflow中有很多类似的问题,但我的问题却略有不同.

我有嵌套的Fragments层次结构,如下面的结构:

                                  Activity
                                     |
                                     |
                                 AFragment
                                     |
                                (ViewPager)
                                 |       |         
                                 |       |         
                         BFragment       BFragment  .....
                            |                       
                       (ViewPager)                       
                        |       |                         
                        |       |                         
                 CFragment     CFragment  ...
                     |
                (ViewPager)                       
                  |     |                              
                  |     |                        
           DFragment   DFragment ...
Run Code Online (Sandbox Code Playgroud)

现在我想知道是否DFragment向用户显示?

我尝试了很多来自StackOverflow的解决方案,但无法取得成功.

我尝试的是:

我尝试setUserVisibleHint()但它返回上面的层次结构中的true多个DFragment,这是一个原因ViewPager

我也试过这些链接:link1,link2,link3等......但没有得到实际的解决方案.

等待帮助.谢谢.

UPDATE

适配器类

class ViewPagerAdapter extends FragmentPagerAdapter {
        private final List<Fragment> mFragmentList = new ArrayList<>();
        private final List<String> mFragmentTitleList = new ArrayList<>();

        public ViewPagerAdapter(FragmentManager manager) {
            super(manager); …
Run Code Online (Sandbox Code Playgroud)

java android android-fragments android-view android-viewpager

16
推荐指数
4
解决办法
2万
查看次数

如何检测片段何时出现在屏幕上?

我的代码的某些部分如何知道片段实例在屏幕上可见?

以下代码片段将解释我的问题.

public class MyApp extends Application {
public static final String TAG = MyApp.class.getSimpleName();

@Override
public void onCreate() {
    super.onCreate();
    registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
        ...

        @Override
        public void onActivityResumed(Activity activity) {
           Log.d(TAG, activity.getClass().getSimpleName() + " is on screen");
        }

        @Override
        public void onActivityStopped(Activity activity) {
            Log.d(TAG, activity.getClass().getSimpleName() + " is NOT on screen");
        }

        ...
    });
}
Run Code Online (Sandbox Code Playgroud)

在这里,我可以跟踪我的应用程序中的任何活动何时出现在屏幕上.有没有办法在Fragments上扩展这种方法?

就像是 Activity.getFragmentManager().registerFragmentLifecycleCallbacks();

UPD.我对活动实现一无所知,他们是否使用片段以及他们如何使用片段(通过xml,ViewPager等注入).我班上唯一拥有的是应用程序上下文.假设Activity和Fragment实现是黑盒子,我无法进行任何更改.

android android-fragments

14
推荐指数
3
解决办法
2万
查看次数

Android片段隐藏秀OnHide/OnShow?

我问这个因为我有点好奇.

1)如果片段已经在xml中创建,大多数谷歌演示会通过其ID找到片段.

因此,如果我们采用这种方法,我们显示片段的方式是隐藏它并显示它,因为已经创建了片段.

2)google也提供了一些示例,您可以使用构造函数创建片段并对其进行充气.如果在该片段中调用getActivity(),则getActivity()返回null的方式很奇怪.

因此,如果我采取第一种方法,我必须隐藏并显示碎片.那么为什么google不提供像onHide或onShow这样的片段的钩子,这样我们就可以正确地处理事情了,如果用我们实现的函数和显式调用来清理自己.

user-interface android show hide fragment

11
推荐指数
1
解决办法
1万
查看次数

如何知道片段何时在viewpager中实际可见

我在 ViewPager 中使用了 4 个片段,因为 ViewPager 提前加载了上一个和下一个片段,并且在片段之间导航时没有调用生命周期方法。那么有什么方法可以检测 Fragment 何时实际可见。提前致谢。

android fragment android-viewpager

10
推荐指数
2
解决办法
1万
查看次数

ViewPager中的片段按钮触发错误引用上的onClickListener

抱歉我的愚蠢标题,我将在下面清楚地描述:

情况

我有ViewPager4 OnBoardingFragment秒内.每个Fragment都具有完全相同的布局,inflated来自相同的xml文件.这个布局包含Button我调用的一个,我为它btnNext设置了OnClickListener它.

getItem我的PagerAdapter的功能

@Override
public Fragment getItem(int position) {
    String title, description, button;
    int resource;
    boolean end = false;
    switch (position) {
        case 0:
            title = context.getString(R.string.on_boarding_title_1);
            description = context.getString(R.string.on_boarding_description_1);
            resource = R.drawable.on_boarding_bg_0;
            button = context.getString(R.string.on_boarding_button_1);
            break;
        case 1:
            title = context.getString(R.string.on_boarding_title_2);
            description = context.getString(R.string.on_boarding_description_2);
            resource = R.drawable.on_boarding_bg_1;
            button = context.getString(R.string.on_boarding_button_2);
            break;
        case 2:
            title = context.getString(R.string.on_boarding_title_3);
            description = context.getString(R.string.on_boarding_description_3);
            resource = R.drawable.on_boarding_bg_2;
            button …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-viewpager

9
推荐指数
1
解决办法
803
查看次数

以编程方式隐藏/显示上下文操作栏

我的用例:

我有一个活动,其中有一个ViewPager作为唯一的视图元素,Fragment为其三个页面设置了三个s(使用a FragmentPagerAdapter).其中一个片段是a ListFragment,而另外两个常规Fragments包含一些信息图表.

在列表中ListFragment允许"检查"元素,并检查元素带来了上下文操作栏,呈现的操作的列表可能选定/检查的项目.

我的问题:

当我选择几个列表项时,CAB会显示出来.但是当我切换页面时,CAB保持可见,呈现动作.更糟糕的是,ViewPager似乎有时会破坏列表片段的视图 - 因此选择操作会引发"java.lang.IllegalStateException: Content view not yet created"异常.

我的问题:

  1. 当用户离开ListFragment页面时,如何让CAB消失?
  2. (可选)当ListFragment背面和某些项目仍然被检查时,如何让CAB重新出现.

android android-viewpager android-listfragment contextual-action-bar

5
推荐指数
1
解决办法
1512
查看次数

如何知道Fragment何时变得不可见

我使用ViewPager和PagerSlidingTabStrip,我有3个片段,每个片段都有自己的自定义监听器.在每个片段中,我都覆盖了Destroy,Pause方法,但不幸的是,当我从一个片段移动到另一个片段时,我必须删除一个片段的监听器,但是由于片段保留在内存中,因此不会调用上述方法.这些方法仅在我移动到另一个Activity时调用.因此,任何身体都可以告诉我如何知道片段是否会变得不可见,以便我可以删除监听器,否则这些监听器将会干扰我所有片段的数据.

java android fragment android-viewpager

5
推荐指数
1
解决办法
2773
查看次数

带有TabLayout的ViewPager与AnimatedVectorDrawable有关

我正在尝试使用VectorDrawable上的一些动画实现简单的ViewPager.
遵循这个非常好的示例解决方案,用于使用点切换进行漂亮的标签滚动.

唯一的区别是我正在使用矢量动画.作为一项活动,它就像一个魅力,添加了ViewPager,动画不会始终如一地启动.

compileSdkVersion 25
buildToolsVersion "26.0.2"
targetSdkVersion 25
Run Code Online (Sandbox Code Playgroud)

我正在我的设备上调试(SG7),我在animation.start()上设置了断点

  • 在中间屏幕上,并不总是调用断点
  • 更常见的是在屏幕1和3上,不会触发动画
  • 当使用点跳跃时,总是会触发1到3个动画!但不是1-2或2-3做!!

所有这一切都在一个大的VectorDrawable上工作,其中3组是动画的.
2个字幕在开始时滑动,然后无限滚动旋转,旋转始终工作.

活动

   @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);

    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());

    // Set up the ViewPager with the sections adapter.
    mViewPager = (ViewPager) findViewById(R.id.pager);
    mHideHandler.post(mHidePart2Runnable);
    mViewPager.setAdapter(mSectionsPagerAdapter);

    TabLayout tabLayout = (TabLayout) findViewById(R.id.tabDots);
    tabLayout.setupWithViewPager(mViewPager, true);

    };
Run Code Online (Sandbox Code Playgroud)

分段:

  public class SectionsPagerAdapter extends FragmentPagerAdapter {

    public SectionsPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        // getItem is called …
Run Code Online (Sandbox Code Playgroud)

user-interface android android-viewpager android-fragmentactivity android-vectordrawable

5
推荐指数
1
解决办法
482
查看次数

androidx.fragment.app.Fragment中的setUserVisibleHint吗?已弃用?为什么不执行?

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (getUserVisibleHint()) {
        isVisible = true;
        onVisible();
    } else {
        isVisible = false;
        onInVisible();
    }
}
Run Code Online (Sandbox Code Playgroud)

我发现这部分代码没有执行。

android androidx

5
推荐指数
3
解决办法
1871
查看次数

用户"刷出"viewpager片段时运行代码?

我需要检测用户何时从我的一个片段中滑入和滑出,我尝试onPause但是当滑动到相邻的屏幕时它似乎没有暂停(当它移动两个sereens时它被破坏).如果可能的话,我想从片段本身做到这一点,因为我正在动态地更改片段,而某些代码只有在存在某个片段时才有用.

是否有可能做到这一点?如何检测滑动"out"(如果可能,从片段本身)?


编辑:

我尝试在Fragment上使用setUserVisibleHint,这似乎是最好的方法,但它永远不会被调用.我正在使用API​​级别19,我不确定缺少什么:

import android.app.Fragment;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;


public class Contacts extends Fragment {
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            View view = inflater.inflate(R.layout.fragment_screen_contacts, container, false);
            return view;
        }


    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        Log.d("MyFragment", "This never shows up.");
        Toast.makeText(getActivity(), "Neither does this", Toast.LENGTH_LONG).show();
    }
}
Run Code Online (Sandbox Code Playgroud)

java android fragment

3
推荐指数
1
解决办法
1339
查看次数

如何在ViewPager中获取当前可见片段的实例:

我正在构建一个显示不同片段的应用程序ViewPager.我将这些片段添加到ViewPager这样的:

 public void intialiseViewPager() 
 {
    List<Fragment> fragments = new Vector<Fragment>();
    numberOfTabs = application.currentReport.getODTabsList().size();
    for (int i = 0; i < numberOfTabs; i++)      
    {
        ODTab tempTab = application.currentReport.getODTabsList().get(i);
        if (tempTab.getTabType().equals(ODGrid.XML_GRID_ELEMENT))
        {
            GridFragment gridFragment = GridFragment.newInstance(tempTab.getTabId());
            fragments.add(gridFragment);
        }
        else  if (tempTab.getTabType().equals(ODChart.XML_CHART_ELEMENT))
        {
            NewChartFragment chartFragment = NewChartFragment.newInstance(tempTab.getTabId());
            fragments.add(chartFragment);
        }
    }
    Log.d(TAG, "Current report fragments set to adapter: "+fragments.toString());
    mPagerAdapter  = new ViewPagerAdapter(getSupportFragmentManager(), fragments);
    mViewPager = (ViewPager)findViewById(R.id.pager);
    mViewPager.setAdapter(mPagerAdapter);
    mViewPager.setOffscreenPageLimit(0);
    mViewPager.setOnPageChangeListener(this);
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我tempTab.getTabId()在此行中传递了一个String()片段:

GridFragment gridFragment = GridFragment.newInstance(tempTab.getTabId());
Run Code Online (Sandbox Code Playgroud)

在片段本身我这样做来初始化它:

public …
Run Code Online (Sandbox Code Playgroud)

android instance android-fragments android-viewpager

2
推荐指数
1
解决办法
2万
查看次数

在ViewPager示例中停止预加载页面

我正在寻找停止在Viewpager中预加载页面的示例源代码。通常,android viewpager会自动加载下一页和上一页。我的目标是使用viewpager,并且我希望在用户可见时在视图(页面中存在)上显示动画。基本上是继续上一篇 文章

如果您能给我任何可行的例子(完整的代码),那就太好了。我发现了很多,但没有找到任何可行的实现。谢谢你的帮助。关于比斯瓦吉特

android android-fragments android-viewpager android-pageradapter

0
推荐指数
1
解决办法
1612
查看次数