相关疑难解决方法(0)

如何获取当前显示的片段?

我在Android中玩片段.

我知道我可以使用以下代码更改片段:

FragmentManager fragMgr = getSupportFragmentManager();
FragmentTransaction fragTrans = fragMgr.beginTransaction();

MyFragment myFragment = new MyFragment(); //my custom fragment

fragTrans.replace(android.R.id.content, myFragment);
fragTrans.addToBackStack(null);
fragTrans.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
fragTrans.commit();
Run Code Online (Sandbox Code Playgroud)

我的问题是,在Java文件中,如何获取当前显示的Fragment实例?

android android-intent android-layout android-fragments

409
推荐指数
21
解决办法
40万
查看次数

动态更新ViewPager?

我无法更新ViewPager中的内容.

一个问题:FragmentPagerAdapter类中的方法instantiateItem()和getItem()的关系和正确用法是什么?

我只使用getItem()实例化并返回我的片段:

@Override
public Fragment getItem(int position) {
    return new MyFragment(context, paramters);
}
Run Code Online (Sandbox Code Playgroud)

这很好用(但据说我不能改变内容).

所以我发现了这个:ViewPager PagerAdapter没有更新View

特别是在其中讨论了方法instantiateItem():

"我的方法是对instantiateItem()方法中的任何实例化视图使用setTag()方法"

所以现在我想实现instantiateItem()才能做到这一点.但我不知道我必须返回那里(return是Object)和getItem(int position)的关系是什么?

目前我正在使用getItem来实例化Fragment,这是错的吗?但是,我是否必须将片段放在实例变量中,或者根本不实现getItem()......?我只是不明白.

我试过阅读参考资料:

  • public abstract Fragment getItem(int position)

    返回与指定位置关联的片段.

  • public Object instantiateItem(ViewGroup容器,int位置)

    创建给定位置的页面.适配器负责将视图添加到此处给出的容器,但它必须确保在从finishUpdate(ViewGroup)返回时完成此操作.参数

    容器包含将在其中显示页面的View.position要实例化的页面位置.

    返回

    返回表示新页面的Object.这不需要是View,但可以是页面的其他容器.

......但我仍然不明白它们是如何相关的以及我必须做些什么.

这是我的代码.我正在使用支持包v4.

ViewPagerTest

public class ViewPagerTest extends FragmentActivity {
    private ViewPager pager;
    private MyFragmentAdapter adapter; 

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

        pager = (ViewPager)findViewById(R.id.slider);

        String[] data = {"page1", "page2", "page3", "page4", "page5", "page6"};

        adapter = new MyFragmentAdapter(getSupportFragmentManager(), 6, this, …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-viewpager

303
推荐指数
7
解决办法
26万
查看次数

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

获取当前片段对象

在我的main.xml

  <FrameLayout
        android:id="@+id/frameTitle"
        android:padding="5dp"
        android:layout_height="wrap_content"
        android:layout_width="fill_parent"
        android:background="@drawable/title_bg">
            <fragment
              android:name="com.fragment.TitleFragment"
              android:id="@+id/fragmentTag"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content" />

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

我正在设置像这样的片段对象

FragmentManager fragmentManager = activity.getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
Fragment newFragment = new FragmentType1();
fragmentTransaction.replace(R.id.frameTitle, casinodetailFragment, "fragmentTag");

// fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
Run Code Online (Sandbox Code Playgroud)

FragmentType2,FragmentType3,...在不同的时间设置不同类型的Fragment对象().现在在某个时间点我需要确定当前存在哪个对象.

,我需要做这样的事情:

Fragment currentFragment = //what is the way to get current fragment object in FrameLayout R.id.frameTitle
Run Code Online (Sandbox Code Playgroud)

我尝试了以下内容

TitleFragment titleFragmentById = (TitleFragment) fragmentManager.findFragmentById(R.id.frameTitle);
Run Code Online (Sandbox Code Playgroud)

    TitleFragment titleFragmentByTag = (TitleFragment) fragmentManager.findFragmentByTag("fragmentTag");
Run Code Online (Sandbox Code Playgroud)

但是两个对象(titleFragmentById和titleFragmentByTag)都是null
我错过了什么吗?
我正在使用Compatibility Package, r3和开发API level …

android android-fragments

168
推荐指数
9
解决办法
29万
查看次数

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

片段切换期间替代onResume()

onResume()当我们在片段之间切换多次时,不会调用方法.那么,有没有更好的方法来处理恢复操作?

android onresume android-fragments

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

在FragmentTransaction.replace()后跟后退按钮后,不会重新创建ViewPager片段

我正在尝试实现保存和恢复状态,但是当用Fragmenta 替换main PreferenceFragment然后按下后退按钮时遇到问题.我的主要Fragment包括ViewPager一个FragmentPagerAdapter用3 Fragments来刷卡.点击后退按钮后,没有调用Fragment.onCreateView()我的3 Fragment秒的回调.我已经尝试了所有我在这里遇到的解决方案,但我无法解决这个问题.

另一个可能需要注意的重要事项是,我的3s ViewPager Fragment的数据存储在单独的类中,这些类是实例化的,可以通过Activity.3 Fragments包含RecyclerView用于列出大量数据的s.这样做是为了清洁,但也是为了使这些数据持续存在Activity.这可能不是问题,因为它在启动应用程序时工作正常,但也因为主要问题是我Fragments没有重新创建.

意外行为:

在应用程序创建时,一切正常,但是当我用另一个替换我的main Fragment(包含ViewPagera FragmentPagerAdapter),然后按下后退按钮时,不会重新创建Fragments中的s ViewPager.在onCreateView()我的主要的Fragment 调用.

问题:

我错过了什么?是否还应该创建一些其他回调?我应该在哪里以及如何重建Fragments

我试过了什么:

  1. 改变了FragmentAdapter使用,但我真的应该使用这里getSupportFragmentManager()的解决方案.

编辑:使用错误FragmentManager实际上我的麻烦的来源.请参阅下面的答案.

  1. 添加 @Override public int getItemPosition(Object object) {return POSITION_NONE;}FragmentPagerAdapter,如此处所示. …

android android-lifecycle android-fragments android-viewpager

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

如何从活动(viewpager)更新片段内容?

我有一个带有两个片段的简单viewPager.每个片段都包含一个TextView.我希望能够更新活动中显示的当前textView的文本.

活动:

public class MainActivity extends FragmentActivity {

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

        ArrayList<Fragment> fragments = new ArrayList<Fragment>();
        fragments.add(Fragment.instantiate(this, Live.class.getName()));
        fragments.add(Fragment.instantiate(this, Hit.class.getName()));

        this.pagerAdapter = new MyPagerAdapter(getSupportFragmentManager(),fragments);

        ViewPager pager = (ViewPager) findViewById(R.id.viewpager);
        pager.setAdapter(pagerAdapter);
    }
}
Run Code Online (Sandbox Code Playgroud)

适配器:

public class MyPagerAdapter extends FragmentPagerAdapter {

    private final ArrayList<Fragment> fragments;

    public MyPagerAdapter(FragmentManager fm, ArrayList<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 …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-viewpager

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

如何为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万
查看次数