2013-10-23 42 views
27

我創建了一個FragmentActivity與此代碼下面ViewPager裏面PopupWindow(或DialogFragment)片段 - 錯誤沒有找到符合ID視圖片段

public class Activity_principal1 extends FragmentActivity { 

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

     List<Fragment> fragments = getFragments(); 
     AcoesMuscularesAdapter ama = new AcoesMuscularesAdapter(getSupportFragmentManager(), fragments); 
     ViewPager vp_contentAcoesMusculares_SequenciaExercicios = (ViewPager) findViewById(R.id.vp_contentAcoesMusculares_SequenciaExercicios); 
     vp_contentAcoesMusculares_SequenciaExercicios.setAdapter(ama); 

    } 

    private List<Fragment> getFragments(){ 
     List<Fragment> fList = new ArrayList<Fragment>(); 
     fList.add(FragmentAcoesMusculares.newInstance("Fragment 1",1)); 
     fList.add(FragmentAcoesMusculares.newInstance("Fragment 2",2)); 
     fList.add(FragmentAcoesMusculares.newInstance("Fragment 3",3)); 
     return fList; 
    } 

} 

,這是我的XML

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/framelayout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@android:color/white" > 

<android.support.v4.view.ViewPager 
    android:id="@+id/vp_contentAcoesMusculares_SequenciaExercicios" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_marginLeft="5dp" 
    android:layout_marginRight="5dp" 
    android:layout_marginTop="5dp" 
    android:background="#fff" /> 

</RelativeLayout> 

的FragmentAcoesMusculares (方法getFragments()內部的代碼是下面的這個類

public class FragmentAcoesMusculares extends Fragment{ 

    public static final String EXTRA_MESSAGE = "EXTRA_MESSAGE"; 

    public static final FragmentAcoesMusculares newInstance(String message,int item) 
    { 
     FragmentAcoesMusculares f = new FragmentAcoesMusculares(); 
     Bundle bdl = new Bundle(item); 
     f.item = item; 
     bdl.putString(EXTRA_MESSAGE, message); 
     f.setArguments(bdl); 
     return f; 
    } 


    private int item; 
    private ImageView images; 
    private String urlString = ""; 
    int i = 0;; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     final View v = inflater.inflate(R.layout.linha_acoesmusculares_viewpager, container, false); 

     images = (ImageView) v.findViewById(R.id.images); 
     final Runnable r = new Runnable() { 

      @Override 
      public void run() { 
      if(i == 0){ 
       urlString = "http://54.232.207.226/atlas.limittraining.com.br/thumb/grupo-muscular-sequencia/1/0/0/bb91e662b4fd6ffde74757ff9bd6e108.jpg"; 
      }else{ 
       urlString = "http://54.232.207.226/atlas.limittraining.com.br/thumb/grupo-muscular-sequencia/1/0/0/7730258ca72a75365d0c4b92a1a68a0a.jpg"; 
      } 

      AQuery aquery = new AQuery(images); 
      aquery.image(urlString); 
      i++; 
      if(i >= 2){ 
       i = 0; 
      } 
      images.postDelayed(this, 1500); 
     } 
    }; 
    images.postDelayed(r, 1500); 

    return v; 
} 

} 

這是我的適配器

public class AcoesMuscularesAdapter extends FragmentPagerAdapter{ 

    private List<Fragment> fragments; 

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

上面的所有代碼工作完美。

現在我試圖創建一個PopupWindow(或DialogFragment)誰將有我的ViewPager。

我修改了代碼,這(我現在的XML activity_principal1都只是一個按鈕和新的XML彈出有我ViewPager)

public class Activity_principal1 extends FragmentActivity { 

private LayoutInflater inflater; 
private View view; 
private PopupWindow window; 
private Button abrir; 

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

    List<Fragment> fragments = getFragments(); 
    AcoesMuscularesAdapter ama = new AcoesMuscularesAdapter(getSupportFragmentManager(), fragments); 

    inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    view = inflater.inflate(R.layout.popup, null,true); 

    ViewPager vp_contentAcoesMusculares_SequenciaExercicios = (ViewPager) view.findViewById(R.id.vp_contentAcoesMusculares_SequenciaExercicios); 
    vp_contentAcoesMusculares_SequenciaExercicios.setAdapter(ama); 

    window = new PopupWindow(view); 

    abrir = (Button) findViewById(R.id.abrir); 
    abrir.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      window.showAsDropDown(v); 
     } 
    }); 
} 

private List<Fragment> getFragments(){ 
    List<Fragment> fList = new ArrayList<Fragment>(); 
     fList.add(FragmentAcoesMusculares.newInstance("Fragment 1",1)); 
     fList.add(FragmentAcoesMusculares.newInstance("Fragment 2",2)); 
     fList.add(FragmentAcoesMusculares.newInstance("Fragment 3",3)); 
    return fList; 
} 

} 

終於這是現在正在發生的錯誤。

10-23 12:29:39.273: E/FragmentManager(6062): No view found for id 0x7f080005 (br.com.examples.testeprojects:id/vp_contentAcoesMusculares_SequenciaExercicios) for fragment FragmentAcoesMusculares{419e41d0 #0 id=0x7f080005 android:switcher:2131230725:0} 
10-23 12:29:39.273: E/FragmentManager(6062): Activity state: 
10-23 12:29:39.273: D/FragmentManager(6062): Local FragmentActivity 419d8e78 State: 
10-23 12:29:39.281: D/FragmentManager(6062):  mCreated=truemResumed=true mStopped=false mReallyStopped=false 
10-23 12:29:39.281: D/FragmentManager(6062):  mLoadersStarted=true 
10-23 12:29:39.281: D/FragmentManager(6062): Active Fragments in 419d9f78: 
10-23 12:29:39.281: D/FragmentManager(6062):  #0: FragmentAcoesMusculares{419e41d0 #0 id=0x7f080005 android:switcher:2131230725:0} 
10-23 12:29:39.281: D/FragmentManager(6062):  mFragmentId=#7f080005 mContainerId=#7f080005 mTag=android:switcher:2131230725:0 
10-23 12:29:39.281: D/FragmentManager(6062):  mState=1 mIndex=0 mWho=android:fragment:0 mBackStackNesting=0 
10-23 12:29:39.281: D/FragmentManager(6062):  mAdded=true mRemoving=false mResumed=false mFromLayout=false mInLayout=false 
10-23 12:29:39.281: D/FragmentManager(6062):  mHidden=false mDetached=false mMenuVisible=true mHasMenu=false 
10-23 12:29:39.281: D/FragmentManager(6062):  mRetainInstance=false mRetaining=false mUserVisibleHint=true 
10-23 12:29:39.281: D/FragmentManager(6062):  mFragmentManager=FragmentManager{419d9f78 in Activity_principal1{419d8e78}} 
10-23 12:29:39.289: D/FragmentManager(6062):  [email protected]8e78 
10-23 12:29:39.289: D/FragmentManager(6062):  mArguments=Bundle[{EXTRA_MESSAGE=Fragment 1}] 
10-23 12:29:39.289: D/FragmentManager(6062):  #1: FragmentAcoesMusculares{419e4450 #1 id=0x7f080005 android:switcher:2131230725:1} 
10-23 12:29:39.289: D/FragmentManager(6062):  mFragmentId=#7f080005 mContainerId=#7f080005 mTag=android:switcher:2131230725:1 
10-23 12:29:39.289: D/FragmentManager(6062):  mState=0 mIndex=1 mWho=android:fragment:1 mBackStackNesting=0 
10-23 12:29:39.289: D/FragmentManager(6062):  mAdded=true mRemoving=false mResumed=false mFromLayout=false mInLayout=false 
10-23 12:29:39.289: D/FragmentManager(6062):  mHidden=false mDetached=false mMenuVisible=false mHasMenu=false 
10-23 12:29:39.289: D/FragmentManager(6062):  mRetainInstance=false mRetaining=false mUserVisibleHint=false 
10-23 12:29:39.296: D/FragmentManager(6062):  mFragmentManager=FragmentManager{419d9f78 in Activity_principal1{419d8e78}} 
10-23 12:29:39.296: D/FragmentManager(6062):  mArguments=Bundle[{EXTRA_MESSAGE=Fragment 2}] 
10-23 12:29:39.296: D/FragmentManager(6062): Added Fragments: 
10-23 12:29:39.296: D/FragmentManager(6062):  #0: FragmentAcoesMusculares{419e41d0 #0 id=0x7f080005 android:switcher:2131230725:0} 
10-23 12:29:39.296: D/FragmentManager(6062):  #1: FragmentAcoesMusculares{419e4450 #1 id=0x7f080005 android:switcher:2131230725:1} 
10-23 12:29:39.296: D/FragmentManager(6062): FragmentManager misc state: 
10-23 12:29:39.296: D/FragmentManager(6062):  [email protected]8e78 
10-23 12:29:39.296: D/FragmentManager(6062):  [email protected] 
10-23 12:29:39.296: D/FragmentManager(6062):  mCurState=5 mStateSaved=false mDestroyed=false 
10-23 12:29:39.296: D/FragmentManager(6062): View Hierarchy: 
10-23 12:29:39.296: D/FragmentManager(6062):  com.android.internal.policy.impl.PhoneWindow$DecorView{419db990 V.E..... ... 0,0-600,976} 
10-23 12:29:39.296: D/FragmentManager(6062):  android.widget.LinearLayout{419dd410 V.E..... ... 0,0-600,976} 
10-23 12:29:39.296: D/FragmentManager(6062):   android.view.ViewStub{419de850 G.E..... ... 0,0-0,0 #10203e5} 
10-23 12:29:39.304: D/FragmentManager(6062):   android.widget.FrameLayout{419dec20 V.E..... ... 0,0-600,976 #1020002 android:id/content} 
10-23 12:29:39.304: D/FragmentManager(6062):   android.widget.RelativeLayout{419dfe98 V.E..... ... 0,0-600,976 #7f080000 app:id/framelayout} 
10-23 12:29:39.304: D/FragmentManager(6062):    android.widget.Button{419e0618 VFED..C. ... 0,0-73,48 #7f080002 app:id/abrir} 
10-23 12:29:39.304: W/System.err(6062): java.lang.IllegalArgumentException: No view found for id 0x7f080005 (br.com.examples.testeprojects:id/vp_contentAcoesMusculares_SequenciaExercicios) for fragment FragmentAcoesMusculares{419e41d0 #0 id=0x7f080005 android:switcher:2131230725:0} 
10-23 12:29:39.304: W/System.err(6062):  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:919) 
10-23 12:29:39.304: W/System.err(6062):  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104) 
10-23 12:29:39.304: W/System.err(6062):  at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682) 
10-23 12:29:39.304: W/System.err(6062):  at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1460) 
10-23 12:29:39.304: W/System.err(6062):  at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:472) 
10-23 12:29:39.312: W/System.err(6062):  at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141) 
10-23 12:29:39.312: W/System.err(6062):  at android.support.v4.view.ViewPager.populate(ViewPager.java:1068) 
10-23 12:29:39.312: W/System.err(6062):  at android.support.v4.view.ViewPager.populate(ViewPager.java:914) 
10-23 12:29:39.312: W/System.err(6062):  at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1436) 
10-23 12:29:39.312: W/System.err(6062):  at android.view.View.measure(View.java:15479) 
10-23 12:29:39.312: W/System.err(6062):  at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:617) 
10-23 12:29:39.312: W/System.err(6062):  at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:399) 
10-23 12:29:39.312: W/System.err(6062):  at android.view.View.measure(View.java:15479) 
10-23 12:29:39.312: W/System.err(6062):  at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1968) 
10-23 12:29:39.312: W/System.err(6062):  at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1214) 
10-23 12:29:39.312: W/System.err(6062):  at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1387) 
10-23 12:29:39.312: W/System.err(6062):  at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107) 
10-23 12:29:39.312: W/System.err(6062):  at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4464) 
10-23 12:29:39.312: W/System.err(6062):  at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725) 
10-23 12:29:39.320: W/System.err(6062):  at android.view.Choreographer.doCallbacks(Choreographer.java:555) 
10-23 12:29:39.320: W/System.err(6062):  at android.view.Choreographer.doFrame(Choreographer.java:525) 
10-23 12:29:39.320: W/System.err(6062):  at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711) 
10-23 12:29:39.320: W/System.err(6062):  at android.os.Handler.handleCallback(Handler.java:615) 
10-23 12:29:39.320: W/System.err(6062):  at android.os.Handler.dispatchMessage(Handler.java:92) 
10-23 12:29:39.320: W/System.err(6062):  at android.os.Looper.loop(Looper.java:137) 
10-23 12:29:39.320: W/System.err(6062):  at android.app.ActivityThread.main(ActivityThread.java:4895) 
10-23 12:29:39.320: W/System.err(6062):  at java.lang.reflect.Method.invokeNative(Native Method) 
10-23 12:29:39.320: W/System.err(6062):  at java.lang.reflect.Method.invoke(Method.java:511) 
10-23 12:29:39.320: W/System.err(6062):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:994) 
10-23 12:29:39.328: W/System.err(6062):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:761) 
10-23 12:29:39.328: W/System.err(6062):  at dalvik.system.NativeStart.main(Native Method)

有人知道我做錯了什麼?

感謝和問候。

+0

我不確定它是否仍然有幫助,但有一個關於如何將ViewPager放在對話框中的教程:https://github.com/kiteflo/Android_Tabbed_Dialog –

回答

47

我找到了一種方法,以我的問題。

在這裏,我們去

首先我用DialogFragment代替PopupView。

所以在我的主要活動中,我只創建了一個調用我的DialogFragment的按鈕。

public class Activity_principal1 extends FragmentActivity { 


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

     Button abrir = (Button) findViewById(R.id.botao); 
     abrir.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       new DialogFragmentWindow().show(getSupportFragmentManager(), ""); 
      } 
     }); 
    } 

}

我的適配器仍然像問題一樣。

這裏是魔術發生的地方。

public class DialogFragmentWindow extends DialogFragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.popup, container); 

     ViewPager vp_contentAcoesMusculares_SequenciaExercicios = (ViewPager) view.findViewById(R.id.vp_contentAcoesMusculares_SequenciaExercicios); 
     List fragments = getFragments(); 
     AcoesMuscularesAdapter ama = new AcoesMuscularesAdapter(getChildFragmentManager(), fragments); 
     vp_contentAcoesMusculares_SequenciaExercicios.setAdapter(ama); 

     getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE); 

     return view; 
    } 

    private List getFragments(){ 
     List fList = new ArrayList(); 
      fList.add(FragmentAcoesMusculares.newInstance("Fragment 1",1)); 
      fList.add(FragmentAcoesMusculares.newInstance("Fragment 2",2)); 
      fList.add(FragmentAcoesMusculares.newInstance("Fragment 3",3)); 
     return fList; 
    } 
}

區別在於getChildFragmentManager()。這一小段代碼保存了我的一天。

對此的解釋是當我使用getSupportFragmentManager()時,甚至指出viewpager在另一個Layout XML中,他認爲它在主佈局XML中。

現在我的應用程序獲取子片段,所以現在他看到ViewPager。

就是這樣。

謝謝大家。

+4

非常感謝你,因爲你是我的救星:)。太糟糕了,我只有一個upvote。 getChildFragmentManager確實像一個魅力。 – kufi

+2

@kufi說什麼。非常感謝。 –

+0

DialogFragmentWindow中有show()方法嗎?因爲當我添加「新的DialogFragmentWindow()。show(getSupportFragmentManager(),」「);」它要求我創建一個名爲「show()」的方法 – Zen

1

我有同樣的問題,我嘗試在另一個xml模板的對話框中創建另一個viewpager,你知道我沒有找到解決這個問題的信息,但是我使用了另一個視圖尋呼機實現,它和viewpager完全一樣supporta圖書館,被稱爲JazzyViewPager,並有多個動畫如此可愛!我建議你使用這個。

這裏是鏈接: https://github.com/jfeinstein10/JazzyViewPager

+1

我忘了告訴你這個實現與CirclePageIndicator兼容;)) –

+0

感謝您的答案@olliestrevel。我找到了另一種解決方案,我會在這裏提供解決方案。無論如何,我會看看你指出的這個項目。可以有用。 – groff07

+1

哦!你是對的@ groff07!我怎麼能忘記getChildFragmentManager函數,這是解決方案!但是我建議你的解決方案是當你已經使用getChildFragmentManager並需要修改以前的Viewpager時需要另一個viewpager。 –

相關問題