相关疑难解决方法(0)

从ViewPager中检索片段

我使用的是ViewPager连同FragmentStatePagerAdapter主办三个不同的片段:

  • [片段1]
  • [Fragment2]
  • [Fragment3]

当我想Fragment1ViewPagerFragmentActivity.

有什么问题,我该如何解决?

android android-fragments android-viewpager

240
推荐指数
8
解决办法
15万
查看次数

作为ViewPager的一部分更新ListFragment中的数据

我正在使用Android中的v4兼容性ViewPager.我的FragmentActivity有一堆数据,可以在我的ViewPager中的不同页面上以不同的方式显示.到目前为止,我只有3个相同的ListFragment实例,但将来我将有3个不同的ListFragments实例.ViewPager位于垂直电话屏幕上,列表不是并排的.

现在,ListFragment上的一个按钮启动一个单独的整页活动(通过FragmentActivity),它返回并且FragmentActivity修改数据,保存数据,然后尝试更新其ViewPager中的所有视图.就在这里,我被卡住了.

public class ProgressMainActivity extends FragmentActivity
{
    MyAdapter mAdapter;
    ViewPager mPager;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
    ...
        mAdapter = new MyAdapter(getSupportFragmentManager());

        mPager = (ViewPager) findViewById(R.id.viewpager);
        mPager.setAdapter(mAdapter);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data)
    {
        ...
        updateFragments();
        ...
    }
    public void updateFragments()
    {
        //Attempt 1:
        //mAdapter.notifyDataSetChanged();
        //mPager.setAdapter(mAdapter);

        //Attempt 2:
        //HomeListFragment fragment = (HomeListFragment) getSupportFragmentManager().findFragmentById(mAdapter.fragId[0]);
        //fragment.updateDisplay();
    }

    public static class MyAdapter extends FragmentPagerAdapter implements
         TitleProvider
    {
      int[] fragId = {0,0,0,0,0};
      public MyAdapter(FragmentManager fm)
      {
         super(fm);
      }
      @Override …
Run Code Online (Sandbox Code Playgroud)

android android-adapter android-fragments android-viewpager android-listfragment

141
推荐指数
5
解决办法
7万
查看次数

使用FragmentPagerAdapter时如何获取现有片段

我有问题使我的片段通过Activity使用FragmentPagerAdapter,作为帮助类来实现对标签的管理以及连接ViewPager关联的所有细节TabHost.我的实现FragmentPagerAdapter与Android示例项目Support4Demos提供的一样.

主要问题是FragmentManager当我没有Id或Tag时,如何从特定片段中获取特定片段?FragmentPagerAdapter正在创建片段并自动生成Id和标签.

android android-fragments fragmentpageradapter

96
推荐指数
6
解决办法
7万
查看次数

使用ViewPager2获取当前片段

我要迁移ViewPager到,ViewPager2因为后者应该可以解决前者的所有问题。不幸的是,当与结合使用时FragmentStateAdapter,我找不到任何方法来获取当前显示的片段。

viewPager.getCurrentItem()给出当前显示的索引,adapter.getItem(index)通常Fragment为当前索引创建一个新索引。除非保留对中所有创建的片段的引用,否则getItem()我不知道如何访问当前显示的片段。

使用old时ViewPager,一种解决方案是调用adapter.instantiateItem(index),它将以所需的索引返回该片段。

我错过了什么ViewPager2吗?

android android-viewpager androidx

10
推荐指数
5
解决办法
871
查看次数

如何在视图寻呼机中更改选项卡时更新列表

在我的应用程序中,我使用视图寻呼机的导航选项卡.我能够使用发布在上面的代码成功绘制标签:

https://github.com/codepath/android_guides/wiki/Sliding-Tabs-with-PagerSlidingTabStrip

在这里,我使用了Sliding选项卡和查看分页器来获取导航选项卡.一切正常,但是当我移动到另一个选项卡时列表没有得到更新.OnResume()被调用,即使对象列表变量也在调试时更新,但可视化列表没有得到更新.

这里我是代码的一些片段:

对于Tab1:在我的情况下是ACTIVE选项卡

 @Override
    public void onResume() {
        super.onResume();

        if(!internetUtil.isConnectedToInternet(getActivity())){
            mSwipeRefreshLayout.setEnabled(false);
        }else{
            mSwipeRefreshLayout.setEnabled(true);
            new GetUsersFromServerTask().execute();  // Here i am making the network calls 
        }
}
Run Code Online (Sandbox Code Playgroud)

在Tab2:哪个是存档选项卡

 @Override
    public void onResume() {
        super.onResume();
        new GetUsersArchivedFromServerTask().execute(); // Network calls
    }
Run Code Online (Sandbox Code Playgroud)

在MainActivity中:

public class MaterialTab extends FragmentActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.material_main_sample);
        ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
        viewPager.setAdapter(new SampleFragmentPagerAdapter(getSupportFragmentManager()));
        PagerSlidingTabStrip tabsStrip = (PagerSlidingTabStrip) findViewById(R.id.tabs);
        tabsStrip.setViewPager(viewPager);
        tabsStrip.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
            @Override
            public void onPageSelected(int position) {
                if(position == 0){ …
Run Code Online (Sandbox Code Playgroud)

tabs android android-viewpager

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

无法在ViewPager中编辑Fragment中的ActionBar标题

我有一个Activity通过a托管多个片段的单个ViewPager.在Activity的onCreate方法中,我使用以下代码来更改ActionBar标题:

    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    if(getSupportActionBar() != null) {
        getSupportActionBar().setTitle(getResources().getString(R.string.custom_title));
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    }
Run Code Online (Sandbox Code Playgroud)

它工作正常,但是一旦Fragment变得可见,我就无法改变它.为了检测它我实施了:

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {

    super.setUserVisibleHint(isVisibleToUser);

    if (isVisibleToUser && getContext() != null) {
            ((MainActivity) getContext()).editActionBarTitle("new title");
    }
}
Run Code Online (Sandbox Code Playgroud)

这里有以下定义editActionBarTitle:

public void editActionBarTitle(String title) {
     if(getSupportActionBar() != null) {
         getSupportActionBar().setTitle(title);
         getSupportActionBar().setDisplayHomeAsUpEnabled(true);
     }
}
Run Code Online (Sandbox Code Playgroud)

我可以看到,只要片段变得可见,就会调用该方法,但它对ActionBar的标题没有影响.为了正确编辑标题,我缺少什么?


编辑

我也试着实施addOnPageChangeListenerviewPager,我可以看到,该方法onPageSelected被调用但对标题没有影响,这里的一对MainActivity一个例子:

public class MainActivity extends BaseActivity {   

    private NoScrollViewPager mViewPager;
    private SectionsPagerAdapter mAdapter; …
Run Code Online (Sandbox Code Playgroud)

java android android-layout android-fragments android-viewpager

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

通过 ViewPager 滑动屏幕时 ExoPlayer 显示错误的预览图像

我有一个PlayerView以纵向占据片段的上半部分,下半部分显示一些文本。该片段是 a 的一部分ViewPager,用户可以切换不同视频的屏幕。

问题:在屏幕之间导航(向右/向左滑动)时,PlayerView有时会显示上一个屏幕的预览图像。它只显示了几分之一秒,然后显示了正确的预览图片,但它很明显。

问:如何让PlayerView只显示正确的预览图片?它不应该与上一张图片一起闪烁。可能是我误用了某些东西(播放器或视图的错误实例化......)?如果这是一个已知问题(滑动时模糊视频等),可能有一些解决方法?任何建议/想法表示赞赏。

我的布局如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.google.android.exoplayer2.ui.PlayerView
        android:id="@+id/video_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_below="@id/video_view"
        android:scrollbars="vertical" />

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

在片段代码中我有:

@Override
public void onStart() {
    ...
    SimpleExoPlayer player = ExoPlayerFactory.newSimpleInstance(
            getActivity(), new DefaultTrackSelector()
    );
    player.prepare(mediaSource);
    playerView.setPlayer(player);
    ...
}
Run Code Online (Sandbox Code Playgroud)

编辑1。

根据评论部分的要求,我的文件PageAdapter非常标准(就像 Android Studio 在创建选项卡式活动时生成的文件一样),具有唯一的扩展名 - 我将当前片段保存在其中,就像此处建议的那样

android android-viewpager exoplayer exoplayer2.x

5
推荐指数
0
解决办法
1164
查看次数