GVKun编程网logo

PageRank(PR值)

24

在这篇文章中,我们将带领您了解PageRank的全貌,包括PR值的相关情况。同时,我们还将为您介绍有关android–FragmentStatePagerAdapterwithChildFragmen

在这篇文章中,我们将带领您了解PageRank的全貌,包括PR值的相关情况。同时,我们还将为您介绍有关android – FragmentStatePagerAdapter with ChildFragmentManager – FragmentManagerImpl.getFragment导、android – ViewPager FragmentStatePagerAdapter方向更改、android – ViewPager不会使用FragmentPagerAdapter进行滑动、android – Viewpager和FragmentPagerAdapter:页面视图删除的知识,以帮助您更好地理解这个主题。

本文目录一览:

PageRank(PR值)

PageRank(PR值)

PageRank是沉迷Google的人们用来测验其站点在Google中的排名的一种衡量规范,SEO和查找引擎营销(SEM)专家也运用这个术语描绘网页在SERP中的排名以及Google依据排名算法给予站点的分数,无论怎么界说,PageRank都是SEO的重要部分。

android – FragmentStatePagerAdapter with ChildFragmentManager – FragmentManagerImpl.getFragment导

android – FragmentStatePagerAdapter with ChildFragmentManager – FragmentManagerImpl.getFragment导

编辑2

我现在设法通过使用来自这里https://code.google.com/p/android/issues/detail?id=42601#c10的技巧摆脱了错误,这就是为什么我的最后一次编辑放在我的问题之上的原因.

但这导致了下一个错误:

java.lang.NullPointerException
at android.support.v4.app.FragmentManagerImpl.getFragment(FragmentManager.java:569)
at android.support.v4.app.FragmentStatePagerAdapter.restoreState(FragmentStatePagerAdapter.java:211)
at android.support.v4.view.ViewPager.onRestoreInstanceState(ViewPager.java:1281)
at android.view.View.dispatchRestoreInstanceState(View.java:12043)
at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2688)
at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2694)
at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2694)
at android.view.View.restoreHierarchyState(View.java:12021)
at android.support.v4.app.Fragment.restoreViewState(Fragment.java:425)
at android.support.v4.app.FragmentManagerImpl.movetoState(FragmentManager.java:949)
at android.support.v4.app.FragmentManagerImpl.movetoState(FragmentManager.java:1104)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1460)
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:440)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4800)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:798)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:565)
at dalvik.system.NativeStart.main(Native Method)

现在我不知道从哪里继续……

编辑0 – 第一个问题

我得到以下异常:

java.lang.IllegalStateException: No activity
at android.support.v4.app.FragmentManagerImpl.movetoState(FragmentManager.java:1091)
at android.support.v4.app.FragmentManagerImpl.movetoState(FragmentManager.java:1086)
at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:1877)
at android.support.v4.app.Fragment.performActivityCreated(Fragment.java:1492)
at android.support.v4.app._HoloFragment.performActivityCreated(_HoloFragment.java:251)
at android.support.v4.app.FragmentManagerImpl.movetoState(FragmentManager.java:947)
at android.support.v4.app.FragmentManagerImpl.movetoState(FragmentManager.java:1104)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1460)
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:440)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4800)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:798)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:565)
at dalvik.system.NativeStart.main(Native Method)

我不知道从哪里开始.我正在使用最新的支持库(v4,rev18).

一切正常,直到我添加一个Fragment,它将ViewPager与FragmentStatePagerAdapter结合在一起.

我到处都在使用支持库,我尝试了https://code.google.com/p/android/issues/detail?id=42601的解决方案……

但还没有任何效果……

我不知道从哪里开始,有人有提示吗?

编辑1:背景和代码

1)在我的MainActivity中,我使用以下内容:

第三页有viewpager …

public void setPage(int pos, boolean addToBackStack)
 {
    Fragment nextFragment = null;
    FragmentTransaction transaction = null;

    switch (pos)
    {
        case 0:
            if (mFragmentAllRoutines == null)
                mFragmentAllRoutines = new RoutinesListFragment();
            if (!mFragmentAllRoutines.isVisible())
                nextFragment = mFragmentAllRoutines;
            break;
        case 1:
            if (mFragmentRoutine == null)
                mFragmentRoutine = new RoutineFragment();
            if (!mFragmentRoutine.isVisible())
                nextFragment = mFragmentRoutine;
            break;
        case 2:
            if (mFragmentDay == null)
                mFragmentDay = new RoutineDayFragment();
            if (!mFragmentDay.isVisible())
                nextFragment = mFragmentDay;
            break;
        default:
            break;
    }

    if (nextFragment != null)
    {
        // Fragment prevFragment = getSupportFragmentManager().findFragmentById(R.id.fragment);
        transaction = getSupportFragmentManager().beginTransaction();
        // if (prevFragment != null)
        //    transaction.detach(prevFragment);
        transaction.replace(R.id.fragment, nextFragment, nextFragment.getClass().getName());
        // transaction.attach(nextFragment);
        if (addToBackStack)
            transaction.addToBackStack(null);
        transaction.commit();
    }
}

2)第三个片段:

它是一个带有ViewPager和FragmentStatePagerAdapter的简单片段. FragmentStatePagerAdapter将getChildFragmentManager()作为FragmentManager获取.在某个地方似乎存在问题.

解决方法:

我需要看到更多的代码才能知道在哪里应用这个……但是我遇到了类似的情况……我以同样的方式解决了ChildFragmentManager问题,并得到了与你一样的NullPointerException.

我确实设法解决了……我会尝试描述我的解决方案,就像你提供的代码一样,我不确定在哪里应用“修复”…这真的是一个修复…它不是一个优雅的方式解决这个问题!然而它确实对我有所帮助,一旦我离开视图寻呼机,我就不需要恢复状态,因此对我来说没有任何不利因素.

我有多个Fragments,它实现了代码的静态位和onDetach(在https://code.google.com/p/android/issues/detail?id=42601#c10上),每个片段都有一个寻呼机,onCreateView我附加了一个扩展FragmentStatePagerAdapter的适配器.

在那些适配器上,我已经覆盖了restoreState方法,什么都不做

    @Override
public void restoreState(Parcelable arg0, ClassLoader arg1) {
    //do nothing here! no call to super.restoreState(arg0, arg1);
}

再次,这不是最好的方式……但它确实解决了我的问题.

祝你好运!

android – ViewPager FragmentStatePagerAdapter方向更改

android – ViewPager FragmentStatePagerAdapter方向更改

我有一个问题:我有一个ViewPager与一些页面,我使用FragmentStatePagerAdapter来处理数据.在纵向我有20页的ViewPager和景观我只有10页的ViewPager.所以在方向改变我创建一个新的适配器与不同的数据.

这里有一点解释为什么:我以纵向显示一幅图像,景观中显示两幅图像,但总是算在内.如果我有10张照片要显示,我有10画像和5景观(总是两个).

但是现在我有一个奇怪的错误:
当我在索引5上的景观并打开设备时,ViewPager的当前页面设置为10.如果我再次将其重新设置为第5页.如果我将ViewPage向下滑动到第10页,则适配器的方法getItem为从来没有打过电话,ViewPage向我显示了一幅肖像画,而不是两幅景观.
怎么会这样呢?适配器或ViewPager中是否有缓存?在活动的onCreate中,一切都是新创建的,适配器以及ViewPager的数据(只有路径的字符串).
所以任何想法如何解决这个真的可怕的“功能”?

这里有一些代码:

的onCreate:

mViewPagerAdapter = new ReaderPageViewAdapter(getSupportFragmentManager(),getBaseContext(),mCurrentDocument.mPages,getResources()
                .getConfiguration().orientation);
    mPageReader = (ReaderViewPager) findViewById(R.id.pager);
    mPageReader.setAdapter(mViewPagerAdapter);

适配器getItem:

public Fragment getItem(final int index) {
        final PageInfo pageInfo = mPages.get(index);
        final PageFragment pageFragment = (PageFragment) PageFragment
                .instantiate(mContext,pageInfo.mClss.getName(),pageInfo.mArgs);
        return pageFragment;
    }

如果你需要更多的东西告诉我.谢谢

解决方法

您可以覆盖FragmentActivity onSaveInstanceState(),而不调用方法中的super.onSaveInstanceState().
@Override
protected void onSaveInstanceState(final Bundle outState) {
    // super.onSaveInstanceState(outState);
}

不要使用mViewPager.setSaveEnabled(false);

它结束了一个大的记忆力.在每次更改方向后,它将Fragments放入FragmentManager数组中,从不清理它.所以在多次更改方向后,可以达到超过100MB的内存使用.使用onSaveInstanceState方法是一种更好的方式.

android – ViewPager不会使用FragmentPagerAdapter进行滑动

android – ViewPager不会使用FragmentPagerAdapter进行滑动

我在Activity中有两个片段,在纵向模式下,当用户在ListView中的某个位置单击时会显示第一个片段(ListFragment),而在横向模式下,两个片段都会显示.但是我想在纵向模式下使用滑动功能,并且应该显示下一个片段,如 this example,

这是我的主要laucher Activity,它扩展了FragmentActivity,

package com.myexample.fragmentdemoexample;

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

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.app.ListFragment;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.ViewGroup;

public class MainFragmentActivity extends FragmentActivity {
    private static int NUM_ITEMS = 4;

    MyAdapter mAdapter;

    ViewPager mPager;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mPager = (ViewPager) findViewById(R.id.pager);
        instantiateFragments();
        Log.i("MainFragmentActivity","MainFragmentActivity is Created");
    }

    public void instantiateFragments() {
        List<Fragment> fragments = new Vector<Fragment>();
        fragments.add(Fragment.instantiate(this,MyListFragment.class.getName()));
        fragments.add(Fragment.instantiate(this,DetailFragment.class.getName()));
        mAdapter = new MyAdapter(getSupportFragmentManager(),fragments);
        mPager.setAdapter(mAdapter);
        mPager.setCurrentItem(0);
    }

    public class MyAdapter extends FragmentPagerAdapter {
        private FragmentManager frmanager;
        private List<Fragment> fragments;

        public MyAdapter(FragmentManager fm,List<Fragment> fragList) {
            super(fm);
            frmanager = fm;
            fragments = fragList;
        }

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

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

这是我的layout / main.xml文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <android.support.v4.view.ViewPager
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/pager"
        android:layout_width="match_parent"
        android:layout_height="0px"
        android:layout_weight="1" >
    </android.support.v4.view.ViewPager>

    <fragment
        android:id="@+id/listFragment"
        android:layout_width="150dip"
        android:layout_height="match_parent"android:tag="listFragment" >
    </fragment>

    <fragment
        android:id="@+id/detailFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"android:tag="detailFragment" >
        <!-- Preview: layout=@layout/details -->
    </fragment>

</LinearLayout>

和/layout-port/main.xml文件包含

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal" >

    <android.support.v4.view.ViewPager
        android:id="@+id/pager"
        android:layout_width="match_parent"
        android:layout_height="0px"
        android:layout_weight="1" >
    </android.support.v4.view.ViewPager>

    <fragment
        android:id="@+id/listFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</LinearLayout>

我不知道为什么View Pager没有刷到下一个片段……我怎么能这样做?我是第一次使用Fragment API ..所以请指出正确的方向.

注意有关其他文件,请参阅this question

解决方法

最后经过几个小时的骚扰后,通过从主布局文件中删除Fragment标签来解决问题.现在main.xml包含

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <android.support.v4.view.ViewPager
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/pager"
        android:layout_width="match_parent"
        android:layout_height="0px"
        android:layout_weight="1" >
    </android.support.v4.view.ViewPager>


</LinearLayout>

这对于有类似问题的其他人可能会有所帮助……

android – Viewpager和FragmentPagerAdapter:页面视图删除

android – Viewpager和FragmentPagerAdapter:页面视图删除

我正在使用一个带有FragmentPagerAdapter的Viewpager来允许添加和删除页面.每页显示从互联网获取的数据.

当添加新页面时,新的片段与该页面相关联.数据通过AsyncTask获取并显示在片段中.当用户选择删除页面时,想法是销毁页面和关联的片段.

一般来说,这一切都很好.我看到的问题如下:

>您有三页数据:

[第1页] [第2页] [第3页]
>删除除最后一页之外的任何页面,如第2页;根据需要消失:

[第1页] [第3页]
>添加新页面;但是,新页面不是一个空白的页面,而是从第3页显示数据(视图).

[第1页] [第3页] [第4页,但显示第3页的观点/数据应为空白]

我的活动中的页面删除代码如下:

// Destroy fragment for this page
   DataListFragment curFrag = getFragmentByName(currentPage);
   FragmentManager fm = getSupportFragmentManager();
   fm.beginTransaction().remove(curFrag).commit();
   fm.executePendingTransactions();
   curFrag = null;

   // Remove page and update adapter
   mPageTitles.remove(position);        
   mAdapter.notifyDataSetChanged();

使用调试器,它显示在执行executePendingTransactions()调用后,该片段从FragmentManager中删除.但是在FrampePagerAdapters调用mAdapter.notifyDataSetChanged()中,片段被添加回来,然后在创建新页面时显示.

我尝试使用FrameStatePagerAdapter,因为这应该允许破坏碎片,但它没有工作.在我的FragmentPagerAdapter的getItemPosition()方法中,我使用返回FragmentAdapter.POSITION_NONE;正如我遇到的另一篇SO文章所指出的.

似乎该页面的View不会被销毁,而是添加到新页面中.我尝试在新页面的视图上使用removeViewAt()方法,但是没有起作用.

作为新的,我相信我错过了一些明显的东西

解决方法

您应该扩展FragmentStatePagerAdapter,并从该适配器中的项目列表中删除相应的项目,而不是尝试从活动中删除片段.删除适配器中的项后,请勿忘记调用adapter.notifyDataSetChanged().一旦完成,ViewPager和FragmentStatePagerAdapter将保留其余的内容.

关于PageRankPR值的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于android – FragmentStatePagerAdapter with ChildFragmentManager – FragmentManagerImpl.getFragment导、android – ViewPager FragmentStatePagerAdapter方向更改、android – ViewPager不会使用FragmentPagerAdapter进行滑动、android – Viewpager和FragmentPagerAdapter:页面视图删除的相关信息,请在本站寻找。

本文标签: