相关疑难解决方法(0)

ViewPager中使用FragmentPagerAdapter的片段在第二次查看时为空白

我有一个片段界面,底部有标签,可以在主视图中打开不同的片段.

我有一个特定的片段,它是一个项目列表.如果用户选择此列表中的一个项目,则打开另一个片段,其中包含一个viewpager,它在前一个片段的列表中的所有项目之间水平滚动.这非常有效.

viewpager使用FragmentPagerAdapter来显示项目.

当用户选择列表中的项目,查看它,然后点击标签栏上的按钮返回列表,然后选择另一个项目时,问题就出现了.第二次选择项目时,将显示空白屏幕而不是viewpager.发生这种情况时,我的LogCat中没有收到任何错误.

为什么viewpager只出现在第一次?

FragmentPagerAdapter:

public class ViewPagerAdapter extends FragmentPagerAdapter {
    Cursor mCursor;

    public ViewPagerAdapter(FragmentManager fm, Cursor c) {
        super(fm);
        mCursor = c;
    }

    public void changeCursor(Cursor c) {
        mCursor = c;
        this.notifyDataSetChanged();
    }

    @Override
    public int getCount() {
        if (mCursor == null) return 0;
        else return mCursor.getCount();
    }

    @Override
    public Fragment getItem(int position) {
        mCursor.moveToPosition(position);
        return TeamCardFragment.newInstance(mCursor, position);
    }
}
Run Code Online (Sandbox Code Playgroud)

PagerFragment:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    Bundle bundle = getArguments();
    mCursorPosition = bundle.getInt(TeamCardCommon.BUNDLE_KEY_CURSOR_POSITION); …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-viewpager android-nested-fragment

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

如何在片段中设置ViewPager

我需要在一个片段中放置一个ViewPager,但我有两个片段,片段1是我的菜单,片段2我想用作ViewPagerIndicator.

但是片段不能有另一个片段......我需要做些什么呢?

在此输入图像描述

android android-fragments android-viewpager android-nested-fragment

45
推荐指数
3
解决办法
7万
查看次数

FragmentPagerAdapter未正确删除项目(片段)

我已经实现了FragmentPagerAdapter和使用a List<Fragment>来保存所有片段以供我ViewPager显示.在addItem()我只是添加一个实例化Fragment然后调用notifyDataSetChanged().我不确定这是否有必要.

我的问题只是......从片段1开始

[Fragment 1] 
Run Code Online (Sandbox Code Playgroud)

添加新的片段2

[Fragment 1] [Fragment 2]
Run Code Online (Sandbox Code Playgroud)

删除片段2

[Fragment 1]
Run Code Online (Sandbox Code Playgroud)

添加新的片段3

[Fragment 1] [Fragment 2]
Run Code Online (Sandbox Code Playgroud)

添加新片段时,一切看起来都很棒.删除片段然后添加新实例化的片段后,仍会显示旧片段.当我去.getClass.getName()它时,它给了我片段3的名字,但我仍然看到片段2.

我相信这可能是一个问题,instantiateItem()但我认为适配器是为我们处理.任何建议都会很棒.

适配器代码......

public class MyPagerAdapter extends FragmentPagerAdapter {
public final ArrayList<Fragment> screens2 = new ArrayList<Fragment>();


private Context context;

public MyPagerAdapter(FragmentManager fm, Context context) {
    super(fm);
    this.context = context;
}

public void removeType(String name){
    for(Fragment f: screens2){
        if(f.getClass().getName().contains(name)){ screens2.remove(f); return; }
    }
    this.notifyDataSetChanged();
}

public boolean addSt(String …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-viewpager

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

带有片段和FragmentActivity的TabHost

我正在研究Android应用程序,我想使用3个选项卡为每个选项卡使用Fragments进行导航,但我不知道如何创建这样做的结构.

我想分别添加每个片段,因为每个片段都不同,但我不知道在FragmentActivity中将它们添加到何处.

我有这些文件.

tabs_layout.xml

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

    <TabHost android:id="@android:id/tabhost"
         android:layout_width="match_parent"
         android:layout_height="match_parent">

         <LinearLayout
                android:orientation="vertical"
                android:layout_width="match_parent"
                android:layout_height="match_parent" >

             <TabWidget
                android:id="@android:id/tabs" 
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
             />

             <FrameLayout
                 android:id="@android:id/tabcontent" 
                 android:layout_width="match_parent"
                 android:layout_height="match_parent"

             >

                 <FrameLayout
                     android:id="@+id/tabRateAPet" 
                     android:layout_width="match_parent"
                     android:layout_height="match_parent"

                 />

                 <FrameLayout
                     android:id="@+id/tabViewMyRates" 
                     android:layout_width="match_parent"
                     android:layout_height="match_parent"

                 />

                 <FrameLayout
                     android:id="@+id/tabViewGlobalRates" 
                     android:layout_width="match_parent"
                     android:layout_height="match_parent"

                 />


             </FrameLayout>
        </LinearLayout>
    </TabHost>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

TabsMain.java

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;

public class MainTabsActivity extends FragmentActivity {
public static final String RATE_A_PET = "Rate a Pet";
public static final String MY_RATES = "My Rates";
public static final …
Run Code Online (Sandbox Code Playgroud)

android android-tabhost android-fragments android-fragmentactivity

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

IllegalArgumentException:在ViewPager中找不到用于片段--- ViewPager的id的视图

我遇到了困扰我好几天的问题.

ViewPager主要活动中有一个持有3 Fragment秒作为标签片段.在第一个片段中有一个ListView包含一些视图,哪个是最重要的视图,另一个视图ViewPager.我想在子中保存一些照片ViewPager,并在这里使用更多片段.

现在有麻烦:
当第一个 Fragment停止时(父节点中的第三个片段在ViewPager屏幕上显示)并恢复(用户切换到第二个片段),应用程序崩溃,调试器说:

java.lang.IllegalArgumentException: No view found for id 0x7f05008b (com.example.viewpager:id/sub_viewpager) for fragment ScreenSlidePageFragment
Run Code Online (Sandbox Code Playgroud)

我已经使用了,getChildFragmentManager()因为这是嵌套片段的情况.

以下是与父ViewPager中第一个片段对应的列表适配器的关键代码:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    int type = getItemViewType(position);
    switch (type) {
        case TYPE_BANNER:
            if (convertView == null) {
                convertView = mBannerView.getBannerView(parent);
            }
            mBannerView.update(convertView);
            break;
        case TYPE_ITEM:
            break;
    }
    return convertView;
}
Run Code Online (Sandbox Code Playgroud)

这是代码mBannerView …

android android-fragments android-viewpager

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

Viewpager中的Fragments的OptionsMenu显示彼此的按钮

我在viewpager中有三个片段.

其中两个片段有自己的onCreateOptionsMenu方法版本:

 @Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);

    // Set up 1 action button
    inflater.inflate(R.menu.home_snapshot_add, menu);
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);

    // Set up 2 action buttons
    inflater.inflate(R.menu.home_snapshot_send, menu);
}
Run Code Online (Sandbox Code Playgroud)

home活​​动有一个基本的onCreateOptionsMenu方法:

    @Override
public boolean onCreateOptionsMenu(Menu menu) {
    return false;
}
Run Code Online (Sandbox Code Playgroud)

在onCreate方法中,每个片段都调用该方法:

setHasOptionsMenu(true);
Run Code Online (Sandbox Code Playgroud)

每个菜单项都有标签:

android:showAsAction="always"
Run Code Online (Sandbox Code Playgroud)

好像我打开Activity一样,所有三个按钮都出现了.然而,当我滚动它们时,错误的那些神奇地消失了.感觉就像活动在Activity创建时调用每个Fragment的选项菜单,然后在我向左和向右滑动时适当地更改菜单.我检查了菜单,但不确定是什么问题.您认为我需要检查的任何事情?我有点想法了.

谢谢!

android android-fragments android-optionsmenu android-actionbar

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

Android,谷歌地图片段和viewpager - 错误膨胀类片段

我试图在一个片段中的viewpager(fragmentpager)中使用google maps v2.如果我滑到第四个片段(查看寻呼机),它工作正常,但如果我回到第一个片段,然后回到第四个 - 与地图 - 我的应用程序死了.

07-04 19:38:20.937: E/AndroidRuntime(20175): FATAL EXCEPTION: main
07-04 19:38:20.937: E/AndroidRuntime(20175): android.view.InflateException: Binary XML     
file line #13: Error inflating class fragment
...
07-04 19:38:20.937: E/AndroidRuntime(20175): Caused by:     
java.lang.IllegalArgumentException: Binary XML file line #13: Duplicate id 0x7f050010,
 tag null, or parent id 0x0 with another fragment for  com.google.android.gms.maps.SupportMapFragment

07-04 19:38:20.937: E/AndroidRuntime(20175):    at     android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:285)
07-04 19:38:20.937: E/AndroidRuntime(20175):    at     android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:676)
Run Code Online (Sandbox Code Playgroud)

Android Java:

public class LocationDetail extends Fragment {

private SupportMapFragment mMapFragment;
private GoogleMap map;
private EventAdapter listAdapter ; …
Run Code Online (Sandbox Code Playgroud)

android google-maps android-fragments

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

FragmentPagerAdapter与ViewPager之间的区别与OffScreenLimit设置为1和FragmentStatePagerAdapter?

FragmentPagerAdapterViewPager与OffScreenLimit设置为1和FragmentStatePagerAdapter?之间有什么区别?

关于FragmentPagerAdapterGoogle的指南说:

此版本的寻呼机最适合在有少量通常更多静态片段进行分页时使用,例如一组选项卡.用户访问的每个页面的片段将保留在内存中,但其视图层次结构可能在不可见时被销毁.这可能导致使用大量内存,因为片段实例可以保持任意数量的状态.对于较大的页面集,请考虑FragmentStatePagerAdapter.

关于FragmentStatePagerAdapter:

当存在大量页面时,此版本的寻呼机更有用,更像列表视图.当页面对用户不可见时,它们的整个片段可能被破坏,只保留该片段的保存状态.与FragmentPagerAdapter相比,这允许寻呼机保持与每个被访问页面相关联的更少的存储器,代价是在页面之间切换时可能具有更多的开销.

我想如果我将offscreenlimit设置为1,它会破坏当前片段的下两个片段之外的所有片段,并且它的行为类似于FragmentStatePagerAdapter.它是否正确?

android android-fragments android-viewpager android-pageradapter

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

ListView中的ViewPagers显示空白列表项

[编辑]:谢谢你们所有有意义的答案,问题现在已经解决了,谢谢你的帮助.类似的问题:Android:我无法拥有ViewPager WRAP_CONTENT

我正在尝试实现我的应用程序的UI:我希望每行ListView都有一个ViewPager.

这是我的文件:

MainActivity.java

package com.condi;

import android.app.ListActivity;
import android.os.Bundle;
import android.view.Menu;

public class MainActivity extends ListActivity {

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

        setListAdapter(new CardListAdapter(this, getFragmentManager()));
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

CardListAdapter.java

package com.condi;

import java.util.List;

import android.app.FragmentManager;
import android.content.Context;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;

public class CardListAdapter extends BaseAdapter {

    private Context context;
    private FragmentManager fragmentManager;
    private List<Profile> …
Run Code Online (Sandbox Code Playgroud)

java xml android listview android-viewpager

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

Viewpager显示错误的页面

我有一个jake Wharton的viewpagerindicator,在那个viewpager我有6个页面.所有页面都包含listviews,我用AsyncTask加载它们.有时viewpager在错误的索引显示错误的页面.这是我的viewpager适配器:

public class TestFragmentAdapter extends FragmentPagerAdapter{
    protected static final String[] CONTENT = new String[] { "a","b","c","d","e","f" };

    private int mCount = CONTENT.length;
    Fragment fragment1,fragment2,fragment3,fragment4,fragment5,fragment6;

    public TestFragmentAdapter(FragmentManager fm) {
        super(fm);
        fragment1 = new CategoryListView();
        fragment2 = CustomizedListviewRecent.newInstance(41);
        fragment3 = CustomizedListviewMostRecents.newInstance(0);
        fragment4 = CustomizedListviewPopulars.newInstance();
        fragment5 = CustomizedListviewRecent.newInstance(42);
        fragment6 = CustomizedListviewRecent.newInstance(43);

    }

    @Override
    public Fragment getItem(int position) {
        if(position == 0)
            return fragment1;
        else if(position == 1)
            return fragment2;
        else if(position == 2)
            return fragment3;
        else if(position == 3)
            return fragment4;
        else …
Run Code Online (Sandbox Code Playgroud)

android android-viewpager viewpagerindicator

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