相关疑难解决方法(0)

从ViewPager中检索片段

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

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

当我想Fragment1ViewPagerFragmentActivity.

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

android android-fragments android-viewpager

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

获取viewpager中的当前Fragment实例

下面是我的代码,3 Fragment classes每个代码都嵌入了3个选项卡中的每一个ViewPager.我有一个菜单选项.如图所示onOptionsItemSelected(),通过选择一个选项,我需要更新当前可见的片段.要更新,我必须调用片段类中的方法.有人可以建议如何调用该方法吗?

public class MainActivity  extends ActionBarActivity {

     ViewPager ViewPager;
     TabsAdapter TabsAdapter;

     @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            ViewPager = new ViewPager(this);
            ViewPager.setId(R.id.pager);
            setContentView(ViewPager);

            final ActionBar bar = getSupportActionBar();

            bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

            //Attaching the Tabs to the fragment classes and setting the tab title.
            TabsAdapter = new TabsAdapter(this, ViewPager);
            TabsAdapter.addTab(bar.newTab().setText("FragmentClass1"),
                    FragmentClass1.class, null);
            TabsAdapter.addTab(bar.newTab().setText("FragmentClass2"),
              FragmentClass2.class, null);
            TabsAdapter.addTab(bar.newTab().setText("FragmentClass3"),
              FragmentClass3.class, null);


            if (savedInstanceState != null) {
                bar.setSelectedNavigationItem(savedInstanceState.getInt("tab", 0));
            }

        }

        @Override
        public boolean onOptionsItemSelected(MenuItem item) {

            switch …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-viewpager

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

作为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保存对旧片段的引用

最新信息:

我已经把我的问题缩小到了一个问题,片段管理器保留了旧片段的实例,而我的viewpager与我的FragmentManager不同步.请参阅此问题... http://code.google.com/p/android/issues/detail?id=19211#makechanges.我仍然不知道如何解决这个问题.有什么建议...

我试图调试这个很长一段时间,任何帮助将不胜感激.我正在使用FragmentPagerAdapter,它接受一个像这样的片段列表:

List<Fragment> fragments = new Vector<Fragment>();
fragments.add(Fragment.instantiate(this, Fragment1.class.getName())); 
...
new PagerAdapter(getSupportFragmentManager(), fragments);
Run Code Online (Sandbox Code Playgroud)

实施是标准的.我正在为Fragments使用ActionBarSherlock和v4可计算性库.

我的问题是,在离开应用程序并打开其他几个应用程序并返回后,片段将丢失其对FragmentActivity的引用(即.getActivity() == null).我无法弄清楚为什么会这样.我试图手动设置,setRetainInstance(true);但这没有帮助.我想当我的FragmentActivity被破坏时会发生这种情况,但是如果我在收到日志消息之前打开应用程序,这仍然会发生.有什么想法吗?

@Override
protected void onDestroy(){
    Log.w(TAG, "DESTROYDESTROYDESTROYDESTROYDESTROYDESTROYDESTROY");
    super.onDestroy();
}
Run Code Online (Sandbox Code Playgroud)

适配器:

public class PagerAdapter extends FragmentPagerAdapter {
    private List<Fragment> fragments;

    public PagerAdapter(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();

    }

}
Run Code Online (Sandbox Code Playgroud)

我的一个碎片被剥夺了但是我很满意每一个被剥离但仍然无法工作的东西......

public class MyFragment extends Fragment implements MyFragmentInterface, OnScrollListener …
Run Code Online (Sandbox Code Playgroud)

android android-fragments

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

在fragmentpageradapter中重用片段

我有一个浏览片段的viewpager.我的FragmentPagerAdapter子类在getItem方法中创建了一个看似浪费的新片段.是否有一个FragmentPagerAdapter相当于convertViewlistAdapter,使我重新使用已创建的片段?我的代码如下.

public class ProfilePagerAdapter extends FragmentPagerAdapter {

    ArrayList<Profile> mProfiles = new ArrayList<Profile>();

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

    /**
     * Adding a new profile object created a new page in the pager this adapter is set to.
     * @param profile
     */
    public void addProfile(Profile profile){
        mProfiles.add(profile);
    }

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

    @Override
    public Fragment getItem(int position) {
        return new ProfileFragment(mProfiles.get(position));
    }
}
Run Code Online (Sandbox Code Playgroud)

android fragment android-compatibility android-fragments

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

如何为viewpager片段设置标记?

我,使用带有4个选项卡的slidingTabLayout和每个选项卡的viewpager和4个片段类.

当用户点击某个按钮时,我需要在我的项目中重新加载我的一个片段(第一个标签),为此我需要为该片段添加一个标签

我的问题是:如何为其中一个viewpagers片段设置一个标签???

我的MainActivity选项卡和viewpager代码:

public class MainActivity extends AppCompatActivity
    implements NavigationView.OnNavigationItemSelectedListener {



Toolbar toolbar;
ViewPager pager;
ViewPagerAdapter adapter;
SlidingTabLayout tabs;
CharSequence Titles[]={"???","????","????","???"};
int Numboftabs = 4;




@Override
protected void attachBaseContext(Context newBase) {
    super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
}



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);




    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Snackbar.make(view, "??? ???? ??????", Snackbar.LENGTH_LONG)
                    .setAction("Action", null).show();
        }
    });



    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);

    NavigationView navigationView = (NavigationView) …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-viewpager

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

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
查看次数

在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
查看次数

ViewPager中的片段,无法获取当前的Fragment实例

在FragmentParentNewsDetail.java类中,我有一个ViewPager,然后我使用FragmentPagerAdapter将每个页面设置为相同的Fragment,如下所示:

@Override
    public Fragment getItem(int position)
    {
        String newsId = this.myNewsIds.get(position);
        Bundle bundle = new Bundle();
        bundle.putInt(FragmentNewsDetail.NEWS_ID, Integer.parseInt(newsId));
        FragmentNewsDetail fragmentNewsDetail = new FragmentNewsDetail();
        fragmentNewsDetail.setArguments(bundle);
        return fragmentNewsDetail;
    }
Run Code Online (Sandbox Code Playgroud)

在FragmentNewsDetail.java中,我有一个公共方法:

public String getNewsTitle()
{
    Log.d(TAG, "getNewsTitle:" + newsTitle);
    return newsTitle;
}
Run Code Online (Sandbox Code Playgroud)

然后我想在FragmentNewsDetail.java中调用getNewsTitle()方法,如下所示:

 newsTitle = ((FragmentNewsDetail)myAdapter.getItem(vpViewPager.getCurrentItem())).getNewsTitle(); 
Run Code Online (Sandbox Code Playgroud)

但getNewsTitle()总是返回"",我对此感到困惑.

通过以下方法修复:

public Fragment getCurrentFragment(ViewPager pager,
        FragmentPagerAdapter adapter)
{
    try
    {
        Method m = adapter
                .getClass()
                .getSuperclass()
                .getDeclaredMethod("makeFragmentName", int.class,
                        long.class);
        Field f = adapter.getClass().getSuperclass()
                .getDeclaredField("mFragmentManager");
        f.setAccessible(true);
        FragmentManager fm = (FragmentManager) f.get(adapter);
        m.setAccessible(true);
        String tag = null;
        tag …
Run Code Online (Sandbox Code Playgroud)

android fragment android-viewpager fragmentpageradapter

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

片段已经添加了IllegalStateException,仅包含一个片段

我知道有关此异常的问题很多,但是,在使用时,我只有一次分配就遇到了此异常FragmentStatePagerAdapter

在设置适配器和寻呼机时,我在下面指出了发生崩溃的行。

设置我的Fragments:

android.support.v4.app.FragmentTransaction t = getSupportFragmentManager().beginTransaction();
t.add(0, new StarTabFragment(), "starTab");
t.add(0, new HierarchiesTabFragment(), "hierarchyTab");
t.add(0, new GroupsTabFragment(), "groupTab");
t.add(0, new VehiclesTabFragment(), "hierarchyTab");
t.commit();
Run Code Online (Sandbox Code Playgroud)

设置我的适配器和寻呼机:

viewPager = (ViewPager) mDrawerLayoutRight.findViewById(R.id.pager);
PagerTabStrip tabs = (PagerTabStrip) mDrawerLayoutRight.findViewById(R.id.pager_tab_strip);
tabs.setTabIndicatorColor(Color.RED);

CustomPagerAdapter customPagerAdapter = new CustomPagerAdapter(getSupportFragmentManager());
viewPager.setOffscreenPageLimit(customPagerAdapter.getCount() - 2);
viewPager.setAdapter(customPagerAdapter); //crashing here
viewPager.setOnPageChangeListener(new LoopingPageChangeListener(viewPager));
viewPager.setCurrentItem(1);
Run Code Online (Sandbox Code Playgroud)

堆栈跟踪:

at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:876)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:135)
    at android.app.ActivityThread.main(ActivityThread.java:5343)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)
Caused by: java.lang.IllegalStateException: Fragment already added: StarTabFragment{d12eb55 …
Run Code Online (Sandbox Code Playgroud)

android

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

从Fragment对象访问FragmentActivity中的元素

我有一个FragmentActivity和FragmentPagerAdapter,它包含许多Fragment对象,我可以通过水平滑动来滑动它们.

我想知道我是否可以从Fragment对象中访问FragmentActivity中的元素("elementToBeChanged")?我想将Fragment类中的String传递给FragmentActivity对象中的TextView元素.

public class GalleryPagerActivity extends FragmentActivity implements OnClickListener {

private TextView elementToBeChanged;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    super.setContentView(R.layout.gallery_pager);

    elementToBeChanged = (TextView) findViewById(R.id.tvTop);
    elementToBeChanged.setOnClickListener(this);

}
}
Run Code Online (Sandbox Code Playgroud)

我怎么会这样做?每当Fragment对象进入视线(使用滑动)时,都必须更新TextView元素.

它应该看起来像这样:

public class GalleryFragment extends Fragment {

private FragmentActivity fa;
private LinearLayout ll;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    fa = super.getActivity();

    ll = (LinearLayout) inflater.inflate(R.layout.gallery_fragment, container, false);
...
// ////////
// UPDATE THE "TextView elementToBeChanged" object in the parent FragmentActivity class HERE WHENEVER THIS FRAGMENTS BECOMES …
Run Code Online (Sandbox Code Playgroud)

android swipe android-fragments fragmentpageradapter

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

如何在MainActivity中获取ViewPager创建的fragment的元素?

我有几个用ViewPager. 我在 MainActivity 的方法中addOnPageChangeListener添加了一个,它给出了所选片段的位置。ViewPageronCreate

尽管我通过声明 a 来防止片段自行销毁setOffscreenPageLimit,但我仍然没有弄清楚如何从 MainActivity 访问片段,因为简单地使用findViewById会返回空对象异常。

我想做的事:

我想访问片段的元素,例如布局和滚动视图,OnPageListenerViewPager

mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {

@Override
    public void onPageSelected(int i) {

        if(i == 0) {
            // Do something with the first fragment.
        } else if(i == 1) {
            // Do something with the second fragment.
        }

    }

}
Run Code Online (Sandbox Code Playgroud)

使用ViewPagerFragmentPagerAdapter

public class SectionsPagerAdapter extends FragmentPagerAdapter {

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

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

java android android-fragments android-viewpager

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