标签: fragmentpageradapter

FragmentPagerAdapter与ViewPager和两个片段.转到第二个中的第一个并更新第一个文本

我不熟悉FragmentPagerAdapter,所以这将成为我们(你)批判性地阅读描述的问题之一.

结构:我有一个FragmentPagerAdapter(下面的代码),一次可以容纳两个片段.第一个显示书籍摘录,第二个显示书名列表.

目标:我想实现标题中描述的内容:用户可以导航到寻呼机中的第二个片段,单击标题,然后我想将用户移回第一个片段并告诉第一个片段更新文本.第一个片段有一个triggerRefresh方法.

代码:我相信我的问题发生是因为FragmentPagerAdapter重用/创建片段的方式(我不明白).这是我的班级:

static class MyFragmentPagerAdapter extends FragmentPagerAdapter {

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

    @Override
    public int getCount() {
        return NUM_ITEMS;
    }

    @Override
    public Fragment getItem(int position) {
        switch(position) {
        case 0:
            return new ExcerptsFragment();
        case 1:
            return new BookListFragment();
        default:
            throw new IllegalArgumentException("not this many fragments: " + position);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这就是我创建相关成员的方式:

ViewPager mViewPager = (ViewPager) findViewById(R.id.pager);
MyFragmentPagerAdapter mFragmentPagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager());
mViewPager.setAdapter(mFragmentPagerAdapter);
Run Code Online (Sandbox Code Playgroud)

这就是我在我的活动中尝试过的其他内容,当我收到书名为Fragment并选择了标题的回调时:

mViewPager.setCurrentItem(0); …
Run Code Online (Sandbox Code Playgroud)

android updating android-fragments android-viewpager fragmentpageradapter

8
推荐指数
1
解决办法
9821
查看次数

使用ViewPager + FragmentPagerAdapter处理方向更改

我在使用ViewPager和FragmentPagerAdapter处理屏幕方向更改时遇到问题.它在应用程序启动时工作正常,但在方向更改(可能丢失)后,viewpager中的片段不可见.我该如何解决这个问题.以下是我的活动结构: 在此输入图像描述

编辑:这是清单文件

<?xml version="1.0" encoding="utf-8"?>
Run Code Online (Sandbox Code Playgroud)

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />

<application
    android:name="com.test.myapp.NetworkManager.TBVolleyInstance"
    android:allowBackup="true"
    android:icon="@drawable/launcher"
    android:label="@string/app_name"
    android:theme="@style/CustomActionBarTheme">
    <meta-data
        android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version" />

    <activity
        android:name=".Home"
        android:label="@string/app_name"
        android:windowSoftInputMode="adjustNothing" >
    </activity>
    <activity
        android:name=".RouterActivity"
        android:label="@string/app_name" >
        <intent-filter android:label="@string/app_name" >
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>
Run Code Online (Sandbox Code Playgroud)

FragmentPagerAdapter实现:

public class PagerAdapter extends FragmentPagerAdapter{

public PagerAdapter(FragmentManager fm) {
    super(fm);

}

@Override
public Fragment getItem(int index) {

    switch (index) {
    case 0:
        return new Fragment1();
    case 1: …
Run Code Online (Sandbox Code Playgroud)

android fragment android-viewpager fragmentpageradapter

8
推荐指数
1
解决办法
3174
查看次数

片段未添加(不一致的崩溃)

在我MainActivity,我有:

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

    checkForCrashes();
    checkForTutorial();
    checkForUpdates();
    setStore();
    setup();
}
Run Code Online (Sandbox Code Playgroud)

setup(),我打电话initializeTabs()回调:

protected void setup() {
    final Store s = getStore();
    setBackground();

    if (s == null) {
        unauthorizedHandler();
        return;
    }
    final Context mainActivity = this;
    fragments = getTabFragments();

    StoresController.getStoreDetails(s, mainActivity, new Callback<StoreDetailDecorator>() {
        @Override
        public void success(StoreDetailDecorator storeDetailDecorator, Response response) {
            s.prettyName = storeDetailDecorator.store.pretty_name;
            s.save();
            Log.v(TAG, s.prettyName);
            TextView toolbar_label = (TextView)findViewById(R.id.toolbar_label);
            toolbar_label.setText(MainActivity.getTruncatedMenuName(s.name()));

            SummaryTab t1 = (SummaryTab)fragments.get(0);
            t1.notifier = (SummaryTabLoadingNotifier)mainActivity;
            initializeTabs(s, fragments);
            t1.populateReport(); …
Run Code Online (Sandbox Code Playgroud)

android android-fragments fragmentpageradapter

8
推荐指数
1
解决办法
277
查看次数

ListFragment的FragmentPagerAdapter getItem错误

我看了很多代码,无法解决这个问题.http://developer.android.com/reference/android/support/v4/app/FragmentPagerAdapter.html

它必须是简单的东西.我正在展示大部分代码.错误在下一节中.

    public class MainActivity extends FragmentActivity implements
    ActionBar.TabListener {

public static final int TAB_COUNT = 3;
public static InputMethodManager inputManager;

SectionsPagerAdapter mSectionsPagerAdapter;
ViewPager mViewPager;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mSectionsPagerAdapter = new SectionsPagerAdapter(
            getSupportFragmentManager());

    // Set up the action bar.
    final ActionBar actionBar = getActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    mViewPager = (ViewPager) findViewById(R.id.pager);
    mViewPager.setAdapter(mSectionsPagerAdapter);

    // When swiping between different sections, select the corresponding
    // tab.
    mViewPager
            .setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
                @Override
                public void onPageSelected(int position) {
                    actionBar.setSelectedNavigationItem(position);
                }
            }); …
Run Code Online (Sandbox Code Playgroud)

android android-listview android-fragments fragmentpageradapter

7
推荐指数
1
解决办法
8107
查看次数

FragmentPagerAdapter getItem位置错误

我有FramentPageAdapter的奇怪问题

MainActivity.java

@SuppressLint("ValidFragment")
public class MainActivity<DashboardActivity> extends FragmentActivity implements     ActionBar.TabListener {
...
...
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    final ActionBar actionBar = getActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    mTabHost = (FragmentTabHost)findViewById(android.R.id.tabhost);
    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
    mViewPager = (ViewPager) findViewById(R.id.pager);
    mViewPager.setAdapter(mSectionsPagerAdapter);
    mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
        @Override
        public void onPageSelected(int position) {
            actionBar.setSelectedNavigationItem(position);
        }
    });

    actionBar.addTab(actionBar.newTab().setText(mSectionsPagerAdapter.getPageTitle(0)).setTabListener(this).setIcon(R.drawable.rating_good));
    actionBar.addTab(actionBar.newTab().setText(mSectionsPagerAdapter.getPageTitle(1)).setTabListener(this).setIcon(R.drawable.action_search));
    actionBar.addTab(actionBar.newTab().setText(mSectionsPagerAdapter.getPageTitle(2)).setTabListener(this).setIcon(R.drawable.action_search));
}
...
public class SectionsPagerAdapter extends FragmentPagerAdapter {
    public SectionsPagerAdapter(FragmentManager fm) {
        super(fm);
    }
    public Fragment getItem(int position) {
        Fragment fragment = null; 
        switch(position) {
            case …
Run Code Online (Sandbox Code Playgroud)

android fragmentpageradapter

7
推荐指数
1
解决办法
8260
查看次数

在Android ViewPager中删除项目+滚动到下一步

我有一个包含ViewPager的Activity,它显示N个片段.每个片段都在我的ViewPager的自定义适配器(extends FragmentStatePagerAdapter)中显示ArrayList中对象的属性.

该片段具有(除其他外)一个按钮,该按钮应该移除当前显示的片段并滚动到下一个片段,setCurrentItem(position, true)以便如果用户向后滚动,则前一个项目消失.我通过使用这样的东西(简化)这样做:

deleteButton.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {

              MyActivity parentActivity = (MyActivity)getActivity();

              // First, scroll to next item (smoothly)
              parentActivity.pager.setCurrentItem(parentActivity.pager.getCurrentItem()+1, true); 

              // Database stuff...
              doSomeDBOperations();

              // Method in Activity that removes the current object (I believe this method is working fine and yes, it calls notifyDataSetChanged())
              parent.removeObject(currentObject);

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

这具有所需的行为,因为按下删除按钮的片段所代表的对象将被删除,并且viewpager将转到下一页.

我的问题是ViewPager不能平滑滚动,而是"立即跳转"到下一个片段.如果我对removeObject()通话进行评论,则平滑滚动有效(但不删除该项目).我相信它与removeObject()setCurrentItem()完成平滑滚动动画之前调用有关?

有关如何解决此问题并实现项目删除+平滑滚动的任何想法?如果我的假设是正确的,我怎样才能确保在删除对象之前完成平滑滚动?

编辑1:

我的假设似乎是对的.如果我把parent.removeObject(currentObject)里面

// ...inside the previously shown public void onClick(View v)...
confirm.postDelayed(new Runnable() { …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-viewpager fragmentpageradapter

7
推荐指数
1
解决办法
5427
查看次数

从Activity调用Tabbed Fragment方法

我有一个包含三个片段的活动.片段使用PagerAdapter使用操作栏选项卡.我想要做的是从主活动中访问活动选项卡式片段中的方法.我已经尝试了下面的代码,但这只是将片段返回为null,所以我猜它无法在标签中找到它!

 NPListFragment articleFrag = (NPListFragment) getSupportFragmentManager().findFragmentByTag("NP");
    articleFrag.refreshT();
Run Code Online (Sandbox Code Playgroud)

PagerAdapter:

public class AppSectionsPagerAdapter extends FragmentPagerAdapter {
public AppSectionsPagerAdapter(FragmentManager fm) {
    super(fm);
}

@Override
public Fragment getItem(int i) {
    switch (i) {
        case 0:
            return new NPListFragment();
        case 1:
            return new PListFragment();
        case 2:
            return new FavouritesFragment();
    }
    return null;
}

@Override
public int getCount() {
    return 3;
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以提出建议吗?我花了大约6个小时,我只是没有取得任何进展来解决这个问题.

tabs android android-fragments fragmentpageradapter

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

在viewpager中具有不同内容的相同片段

嘿伙计们我遇到了严重的问题.我有一个父片段,其中有viewpager和tablayout.Viewpager保存具有与之关联的不同内容的片段.每次思考都可以在滑动时正常工作,但每当我点击tablayout的不同选项卡时,SwipableFragment的categoryId和categoryName就会更改为相邻选项卡的SwipableFragmet到可见片段.

基本上当我启动FragmentAllNews(包含一个ViewPager)时,它会显示第二个片段/页面而不是第一个片段/页面,当我向第二个片段移动时,我会看到第三个...换句话说,它总是显示下一个或前一个片段/页面取决于滑动方向(左或右).

对不起,我的英语不好 :(

这是我的Fragments和FragmentStatePagerAdater类

1 FragmentAllNews,包含viewpager和tablayout

public class FragmentAllNews extends Fragment {
    @Bind(R.id.tab_layout)
    TabLayout tabLayout;
    @Bind(R.id.all_news_viewpager)
    ViewPager viewPager;

    SessionManager sessionManager;
    String categoryId;
    String categoryName;
    ArrayList<TabModel> tabs;


    public static FragmentAllNews createNewInstance() {
        FragmentAllNews fragmentAllNews = new FragmentAllNews();
        return fragmentAllNews;
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        sessionManager = new SessionManager(getActivity());
        tabs = sessionManager.getSwitchedNewsValue() == 0 ?
                StaticStorage.getTabData(0) :
                StaticStorage.getTabData(1);
    }


    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View fragmentView = inflater.inflate(R.layout.fragment_all_news, container, false);
        ButterKnife.bind(this, …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-viewpager fragmentpageradapter

7
推荐指数
0
解决办法
2283
查看次数

Android:使用viewPager加载限制片段

我有3个片段由FragmentPagerAdapter管理,设置为viewPager.

我想逐个加载片段,但是当执行FragmentActivity的onCreate方法时,会执行2个第一个片段(onCreateView方法).

我试图用setOffscreenPageLimit方法限制片段加载但没有任何改变.

mPagerAdapter =  new MyPagerAdapter(super.getSupportFragmentManager(), fragments);
pager = (ViewPager) super.findViewById(R.id.tabviewpager);
pager.setOffscreenPageLimit(0);
pager.setAdapter(this.mPagerAdapter);
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助 .

android android-fragments android-viewpager fragmentpageradapter

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

使用FragmentPagerAdapter向左侧添加选项卡

这将是关于标签的最后一个问题,我保证:)(也许)所以从以前的问题和尝试和错误我有FragmentPagerAdapter调用PagerAdapter创建一些选项卡,并使我能够动态创建新选项卡.问题是新选项卡将始终插入到现有选项卡的右侧:

(图片: http://s7.directupload.net/file/d/3198/73dyzvzv_png.htm

我尝试了以下方法:

  1. 添加一个静态条目"null",在创建初始选项卡集时会跳过该条目.然后在创建"Temp Tab"时,我可以将该条目覆盖到我想要的任何片段.给了我一些奇怪的IllegalSTateException ...

  2. 我认为这将是最好的,实际上真的很想工作:而不是添加片段:

    private final List<Fragment> mFragments = new ArrayList<Fragment>();
    
    public void addFragment(Fragment fragment) {
        mFragments.add(fragment);
        notifyDataSetChanged();
    }
    
    Run Code Online (Sandbox Code Playgroud)

使用

mFragments.add(0, fragment);
Run Code Online (Sandbox Code Playgroud)

但它给出了一条带有消息的IllegalStateException:

Can't change tag of fragment ChatFragment
Run Code Online (Sandbox Code Playgroud)

当我尝试添加临时片段时.现在,有两个问题:

  1. 有没有办法绕过该片段选项卡,我可以暂时取走所有片段标签并重建它们全部或其他东西吗?要么

  2. 有没有更好,更优雅的方式来做到这一点?或者我应该重新设计我的UI,以便可以使用右侧的选项卡?:P

编辑:这里有一些代码:(我从不想把死亡之墙发给人们,因为它可能吓跑他们:o)

FragmentPagerAdapter:

public class PagerAdapter extends FragmentPagerAdapter {

  private Context mContext;

  public PagerAdapter(FragmentManager fm, Context context) {
    super(fm);
    mContext = context;
  }

  private final List<Fragment> mFragments = new ArrayList<Fragment>();
  public void addFragment(Fragment fragment) {
    mFragments.add(fragment);
    notifyDataSetChanged();
  }

  @Override
  public Fragment getItem(int position) {
    return mFragments.get(position); …
Run Code Online (Sandbox Code Playgroud)

android illegalstateexception fragmentpageradapter android-tabs

6
推荐指数
1
解决办法
1778
查看次数