标签: fragmentpageradapter

在onPageSelected()中访问时,片段成员变量变为null

我正在使用FragmentPagerAdapter和FragmentActivity来创建可滑动的片段.

我在pagerAdapter中的第一个片段看起来像这样.

public class MySummaryFragment extends CommonFragment implements OnPageChangeListener 
{
   private Context mContext;
   private View mMyView;

LinearLayout mDetailLayout;
TextView mDateTxtView;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    System.out.println("onCreateView() Market summary");
    mMyView = inflater.inflate(R.layout.my_page_summary_fragment_layout, container,false);
    mDetailLayout = (LinearLayout)mMyView.findViewById(R.id.SummaryDetailLayout);
    mDateTxtView = (TextView) mMyView.findViewById(R.id.txtDate);

    Account_Id = AccountDetails.getInstance(mContext).getClientCodes().get(0);
    sendRequest(Account_Id);

    return mMyView;

}


 @Override
public void onPageSelected(int arg0) {
    System.out.println("inside onPageScrollStateChanged()");
    System.out.println("mMyView is null ? = "+(mMyView==null));
    mDateTxtView = (TextView) mMyView.findViewById(R.id.txtMarketSummaryDate);
    Account_Id = AccountDetails.getInstance(mContext).getClientCodes().get(0);
        mDateTxtView.setText("");   
            sendRequest(Account_Id);
}
}
Run Code Online (Sandbox Code Playgroud)

这里的问题是当刷出5-6个片段并向后滑动到第一个片段时,我得到NullPointerException.

当我尝试调试时,我发现了

mMyView为空?=真

为什么这样? …

android android-fragments fragmentpageradapter android-fragmentactivity

6
推荐指数
2
解决办法
2991
查看次数

动态更改android.support.v4.view.PagerTitleStrip的标题

我在我的应用程序中使用PagerTitleStrip是最新的(Doc:http://developer.android.com/reference/android/support/v4/view/PagerTitleStrip.html)

一切正常,我设置了这样的标题:

public class PageAdapter extends FragmentPagerAdapter {

    private List<Fragment> fragments;

    public PageAdapter(FragmentManager fm, List<Fragment> fragments) {
        super(fm);
        this.fragments = fragments;
    }

    @Override
    public Fragment getItem(int position) {
        return this.fragments.get(position);
    }

    @Override
    public int getCount() {
        return this.fragments.size();
    }

    String[] titles = { "1", "2", "3", "4","5" };

    @Override
    public CharSequence getPageTitle(int position) {
        return titles[position];
    }
}
Run Code Online (Sandbox Code Playgroud)

我现在担心的是,一旦第一个Fragment完成加载,我就必须更改条带的标题.

我已经尝试获取FragmentPagerAdapter并尝试操作它,但从未成功更改标题(文本)

确实有一个getPageTitle方法:mPagerAdapter.getPageTitle(position)但没有setPageTitle ...

有什么想法或建议吗?

android fragmentpageradapter

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

删除并添加页面到FragmentPagerAdapter

我正在使用5页的片段寻呼机适配器.并设置适配器以查看寻呼机,如下所示

 public class xxx extends FragmentPagerAdapter
    {
        final int PAGE_COUNT_LOGGED_IN = 6;
        final int PAGE_COUNT_LOGGED_OUT = 2;
        TextView oTextView = null;
        LayoutInflater inflater = null;
        PagerTabStrip m_oPageTabStrip = null;
        String m_strTab = null;
        String[] m_strArray = null;     
        Context m_oContext = null;

        /** Constructor of the class */
        public xxxx (Context context, android.support.v4.app.FragmentManager oFragmentManager) 
        {
            super (oFragmentManager);
            m_oContext = context;
        }

        /** This method will be invoked when a page is requested to create */
        @Override
        public Fragment getItem(int arg0) 
        { …
Run Code Online (Sandbox Code Playgroud)

android adapter android-fragments android-viewpager fragmentpageradapter

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

使用新订单中的片段更新viewpager

我有一个ViewPager设置,它从服务器传递的数据中为其页面(视图)绘制数据.有时,服务器将发送将重新排序视图的新数据(有时会添加新视图),我需要在用户当前查看特定片段时在我的Android设备上无缝地进行此操作.

我将它设置为在从服务器下拉新数据时调用notifyDataSetChanged(),但这似乎将幻灯片的缓存版本保留在当前查看的幻灯片的左侧和右侧,这可能会随着重新排序而改变.我在这里看过这个主题:ViewPager PagerAdapter没有更新View并实现了第一个工作正常的解决方案,除了它重新加载正在查看的当前幻灯片,这对我的目的不起作用.我在第二个答案中实现了在同一页面上提出的setTag()方法,并且可以用于更新幻灯片上的信息,但是它不会帮助我重新排序它们.

有什么方法可以重新排序幕后的所有幻灯片,而不会在当前查看的幻灯片中造成任何打击?

TIA

编辑:添加代码并要求进一步澄清

这是我的Adapter类.

    private class ScreenSlidePagerAdapter extends FragmentPagerAdapter {
    ContestEntriesModel entries;

    public ScreenSlidePagerAdapter(FragmentManager fm, ContestEntriesModel Entries) {
        super(fm);
        this.entries = Entries;
    }

    @Override
    public long getItemId(int position) {
        return entries.entries[position].ContestEntryId;

    }

    @Override
    public int getItemPosition(Object object) {
        android.support.v4.app.Fragment f = (android.support.v4.app.Fragment)object;
        for(int i = 0; i < getCount(); i++){

            android.support.v4.app.Fragment fragment = getItem(i);
            if(f.equals(fragment)){
                return i;
            }
        }
        return POSITION_NONE;
    }


    @Override
    public android.support.v4.app.Fragment getItem(int position) {

        long entryId = getItemId(position);
        //Log.d("EntryIds",Integer.toString(entryId));
        if(mItems.get(entryId) != …
Run Code Online (Sandbox Code Playgroud)

android android-viewpager fragmentpageradapter android-pageradapter

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

将片段绑定和解除绑定与片段绑定(在ViewPager中)

我有一个单一的Main-Activity,我在ViewPager中创建动态Pages(通过FragmentPagerAdapter).到现在为止还挺好.

现在我得到了一个服务实现我想要那些活动/那些片段绑定到.这就是我要问自己哪一点是最好的做法.

  1. 绑定到活动并通过活动回调从片段到服务进行通信?(在onCreate()/ onDestroy()中绑定/解除绑定)
  2. 在创建时绑定到每个片段并在销毁时解除绑定?(与上述相同)

两种实现似乎都有效.但第二个提供与服务的更直接的沟通.

在测试时,第二个片段必然会在创建时服务.但当我删除除了一个以外的所有东西时,它们似乎并没有被破坏.当我再次开始从那一点创建片段(删除其他片段后只有一个片段)时,只有当我创建比以前创建的片段更多的片段时,才会发生绑定到服务.

也许再次提供更好的概述.

  • 在pager中使用一个片段创建活动:连接到片段的服务
  • 在pager中创建另外2个片段:在每个创建上签名的服务
  • 除去一个片段之外的所有片段:unbinding似乎没有被调用
  • 再次创建2个片段:服务似乎没有连接
  • 创建另一个片段:在创建时受到服务

这是人们可以期待的行为吗?这是我应该选择的实施; 回调通信显然更直接的沟通?

感谢您提前输入!

android android-service android-fragments android-viewpager fragmentpageradapter

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

带有嵌套片段的ViewPager?

我的问题

根据谷歌的文档:

您现在可以将片段嵌入片段中.这对于您希望将动态和可重用UI组件放入自身动态且可重用的UI组件的各种情况都很有用.例如,如果使用ViewPager创建 向左和向右滑动并占用大部分屏幕空间的 片段,则现在可以将片段插入到每个片段页面中.要嵌套片段,只需在要添加片段的片段上调用getChildFragmentManager().这将返回一个FragmentManager,您可以像通常从顶级活动那样使用它来创建片段事务.例如,这里有一些代码可以在现有的Fragment类中添加一个片段:

Fragment videoFragment = new VideoPlayerFragment();
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
transaction.add(R.id.video_fragment, videoFragment).commit();
Run Code Online (Sandbox Code Playgroud)

所以我创造了自己的PageFragment.而我PageFragmentAdapter的3页PageFragment.我还有6个片段:Fragment1,Fragment2,Fragment3,FragmentA,FragmentB,FragmentC.在我的MainActivity初始化我的六个片段,我ViewPager和它PageFragmentAdapter(它PageFragment自己初始化三个).

然后,我用这个方法来附上我的Fragment1,Fragment2,Fragment3每个页面(每个PageFragment的)PageFragmentAdapter:

PageFragmentAdapter tPageFragmentAdapter = new PageFragmentAdapter(getSupportFragmentManager());
tPageFragmentAdapter.setFirstPage(tFragment1);
tPageFragmentAdapter.setSecondPage(tFragment2);
tPageFragmentAdapter.setThirdPage(tFragment3);
Run Code Online (Sandbox Code Playgroud)

我可以回复(通过方法PageFragmentAdapter)片段并将"嵌套片段"放入我的PageFragment(当然onCreate())中,如:

getChildFragmentManager().beginTransaction()
.add(R.id.framelayout_history, mFragment)
.addToBackStack(null)
.commit();
Run Code Online (Sandbox Code Playgroud)

注意:我用它PageFragment.setNestedFragment() …

android nested android-fragments android-viewpager fragmentpageradapter

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

在使用具有不同片段/布局的视图寻呼机时如何传递片段参数?

目的:为了使用片段参数从一个沿字符串值传递TextView到一个新的片段TextView,但在使用ViewPager具有不同layouts/fragmentsFragmentPagerAdapter

问题:新片段永远不会从前一个片段接收片段参数。

我的设置:我有我的Activity托管ViewPagerFragmentPagerAdapter。我已经重写FragmentPagerAdapters getItem(int position)fragment根据ViewPager. 现在Fragments我的适配器中只有两个,但在克服这个障碍后会添加更多。我正在使用该newInstance()技术传递Fragment的参数,但没有传递任何内容。

相关代码

我的 FragmentPagerAdapter 代码:

//this is a variable that I pass in as the newInstanct() methods parameter,
// I update   this variable from my fragments constantly
public static String fragmentArgumentsValue = "";

mViewPager.setAdapter(new FragmentPagerAdapter(fm) {


            @Override
            public int getCount() {

                return NUMBER_OF_VIEWS; …
Run Code Online (Sandbox Code Playgroud)

java android android-fragments android-viewpager fragmentpageradapter

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

ViewPager中的片段返回空对象onResume

我使用FragmentPagerAdapter从片段切换.我需要在制作片段开关时调用一些函数,并且在OnPause和OnResume上遇到一些麻烦,所以这个问题的建议我实现了一个接口OnPageSelectListener:

public interface OnPageSelectListener {
    void onPageSelected();
    void onPageNotVisible();
}
Run Code Online (Sandbox Code Playgroud)

只要此页面到达前台,它就会调用OnPageSelected函数.工作得很好,除了我想在我的适配器上调用一个函数.我认为这样可行,除了我的适配器一直返回NULL(即使它被初始化并且数据在我的列表视图中被加载为首选).

    public class AfterCheckFragment extends Fragment implements OnPageSelectListener{


        private   ListView listView;
        private List<Check> checkList;
        private CheckListAdapter adapter;


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view =  inflater.inflate(R.layout.fragment_check, container, false);

        System.out.println("VIEW create  called");

//(.. some other stuff, not relevant for question..)

        //initializing the adapter
          listView = (ListView) view.findViewById(R.id.listView);
        adapter = new CheckListAdapter(checkList,getActivity(),trainPosition);

        listView.setAdapter(adapter);
        adapter.handleButtonVisibility();
        return view;

    }
@Override …
Run Code Online (Sandbox Code Playgroud)

android oncreate android-fragments android-viewpager fragmentpageradapter

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

使用FragmentPagerAdapter在Android ViewPager中滑动不工作

我想为ViewPagerAndroid 创建一个滑动应用程序.当我运行下面的代码时,它会成功运行并Fragment打开蓝色,但是滑动不起作用.你能告诉我为什么吗?

这是我的Activity:

package app.learn.com.learnapp;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;

import android.os.Bundle;

import java.util.List;
import java.util.Vector;

import menulistFrag.blueColor;
import menulistFrag.greenColor;
import menulistFrag.redColor;


public class MenuActivityList1 extends FragmentActivity {

    ViewPager viewPager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_menu_activity_list1);
        viewPager = (ViewPager)findViewById(R.id.pager);

        instantiateFrags();



    }
    public  void instantiateFrags(){
        List<Fragment> frags = new Vector<Fragment>();
        frags.add(Fragment.instantiate(this, redColor.class.getName()));
        frags.add(Fragment.instantiate(this, greenColor.class.getName()));
        frags.add(Fragment.instantiate(this, blueColor.class.getName()));
        PagerAdapter pagerAdapter = new PagerAdapter(getSupportFragmentManager(),frags);
        viewPager.setAdapter(pagerAdapter);
        viewPager.setCurrentItem(0);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的PagerAdapter:

package app.learn.com.learnapp;


import android.support.v4.app.Fragment; …
Run Code Online (Sandbox Code Playgroud)

android swipe android-fragments android-viewpager fragmentpageradapter

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

UICollectionViewCell上的ContainerView

我在iOS App Storyboard中创建了一个Container View.我想在UICollectionView的一个单元格中水平翻页(就像Android的FragmentPager一样).但是,如果您在UICollectionViewCell中放入容器视图,则会发生错误:

故事板:错误:非法配置:容器视图不能放在运行时重复的元素中

ios fragmentpageradapter container-view uicollectionview uicollectionviewcell

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