2017-02-02 28 views
0

我用片段沒有這一項,進口android.app.Fragment我如何覆蓋嵌套片段onactivityresult方法?

我用這一個,進口android.support.v4.app.Fragment

,因爲我用它來viewpager

public class PagerAdapter extends FragmentPagerAdapter{ 

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

     @Override 
     public Fragment getItem(int position) { 

      if(position == 0){ 
       return new FragmentOne(); 
      }else if(position == 1){ 
       return new FragmentTwo(); 
      } 


     } 

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

在這種情況下,FragmentOne延長進口android.support.v4.app.Fragment 所以沒有錯誤,但FragmentTwo所以發生錯誤

所以我有兩個延伸進口android.app.Fragment問題

  1. 如果我使用viewpager,Fragment必須擴展import android.support.v4.app.Fragment?

  2. 如果我必須擴展導入android.support.v4.app.Fragment,我該如何使用onactivityresult?

+0

參考此鏈接http://stackoverflow.com/questions/28496682/onactivityresult-not-call-in-the-fragment –

+0

@AnuragSingh我想在FragmentOne調用由startActivityResult的活動,但FragmentOne不能覆蓋方法onactivityresult –

+0

哎呀對不起我隱藏的方法,所以我找不到它對不起 –

回答

0

理想情況下,您應該只使用支持庫的Fragment,即android.support.v4.app.Fragment以實現向後兼容性。

由於您正在使用Fragment適配器,它是支持庫中的一個類,只處理android.support.v4.app.Fragment,因此您必須使用支持庫的片段。

您可以像使用android.app.fragment一樣正常使用android.support.v4.app.Fragment。支持庫也有onActivityResult方法,並且可以很容易地繼承。

@Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
    } 
+0

我也認爲,但不是自動完成的方法,而不是覆蓋 –

+0

感謝您的答案,它的工作 –

0

對於一號通 使用android.support.v4.app.Fragment如果您的應用程序需要的API級別15 其他支持,如果你分鐘API級別是17,你可以使用android.app。片段

對於二速 在你的活動講座

@Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     switch (requestCode) { 
      case <requestCode>: 
       ((FragmentOne)pageAdapter.getItem(0)).onActivityResult(requestCode, resultCode, data); 
       break; 
     } 
    } 
+0

感謝您的回答它的工作 –

1

只能使用這兩個庫之一,在你的應用程序,如果你想要遺留支持添加support庫。

爲了通知您的片段有關活動結果的變化,您可以使用界面進行更改。

在你的活動:

public interface ActivityResultListener { 
    onActivityResult(int requestCode, int resultCode, Intent data); 
} 

,並創建兩個方法來setremoveActivityResultListener

public void setActivityResultListener(ActivityResultListener listener){ 
    // You need the listener (ActivityResultListener) variable in the Activity 
    this.listener = listener; 
} 
public void removeActivityResultListener(){ 
    listener = null; 
} 

然後,如果當您收到活動結果存在通知你的聽衆。

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if(listener != null){ 
     listener.onActivityResult(requestCode, resultCode, data); 
    } 
} 

在片段實現的接口:

public class WhateverFragment implements MyActivity.ActivityResultListener{ 
    // .... 
} 

這將迫使你重寫onActivityResult方法。當活動得到它時,你將得到結果,做你想做的事。只剩下一步,將WhateverFragment設置爲onAttach上的聽衆並將其從onDetach方法中刪除。

onAttach方法:

((MyActivity)getActivity()).setActivityResultListener(this); 

onDetach方法:

((MyActivity)getActivity()).removeActivityResultListener(); 

這一直對飛寫所以有可能是錯誤的。

+0

感謝您的答案它的工作 –

0

第一個問題

如果我使用viewpager,片段必須延長進口android.support.v4.app.Fragment?

爲了使用FragmentPagerAdapterFragmentStatePagerAdapter

案例1:如果您的應用針對17個以下android api級別,則使用支持庫。 (在android.app.Fragment中,17以下的childFragmentManager不可用)

情況2:如果您的應用程序的目標應用程序爲17以上的android api,則使用android.app.Fragment。 (從API級別17以上childFragmentManager可android.app.Fragment)

爲了使用PagerAdapter

你可以選擇任何,無論是支持庫或android.app.Fragment。

第二個問題

如果我必須延長進口android.support.v4.app.Fragment,我怎麼可以使用onactivityresult?

查看本產品Answer

+0

感謝您的答案,它的工作 –