0

我想從Fragment開始Activity當我按最後一個按鈕,但我得到一個空白的佈局,而不是與Activity關聯的佈局。如何從片段開始活動?

我叫FragmentMainActivity.class這樣的:

FragmentManager mFragmentManager = getSupportFragmentManager(); 
FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction(); 
fragmentTransaction.replace(R.id.mainContent,new FragmentMain()).commit(); 

而且在FragmentMain類我有一個onClick方法類似如下:

@Override 
public void onClick(View v) { 
    Intent intent = new Intent(getActivity(), FinalClass.class); 
    getActivity().startActivity(intent); 
} 

但結果卻是一個空白的佈局,沒有錯誤顯示在logcat上。我已經在網上搜索,類似的行爲上,我發現了一些解決方案,並沒有解決我的問題:

我不會對我的項目的任何方法addToBackStack()因此該方案不不適合我。

getActivity().startActivity(myIntent)是公認的答案。

他們用來從片段啓動活動的方式不會改變我使用的方式。

任何提供的解決方案的工作對我來說。

PS:我已經宣佈對Manifest.xml文件Activity

<activity 
     android:name=".FinalClass" 
     android:screenOrientation="portrait" 
     android:label="Final Class" 
     android:icon="@mipmap/ic_launcher" 
     android:theme="@style/AppTheme.NoActionBar" /> 

PS2:不要懷疑問,如果你需要更多的代碼(我試圖簡化它把重點放在問題)。

我該怎麼做才能避免Activity給我一個空白的佈局,而不是與該Activity相關聯的佈局?

提前致謝!

+0

確實有'FInalClass'活動的佈局有什麼看法? –

+0

只是一個方面的說明,不知道如果做一個片段'getActivity()。startActivity()'是一個很好的做法。我建議使用你的活動將實現的接口,然後從你的片段的接口調用一個方法。然後從您的活動開始您的活動。不要認爲它與你的問題有關雖然.. – vkislicins

+0

@BurhanuddinRashid我有以下內容:public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState){ final View inflaterFinalClass = inflater.inflate(R.layout.activity_final_class , 空值);返回inflaterFinalClass;' –

回答

1

設置你的佈局在這樣的活動中onCreate

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

不使用onCreateView的活動

0

您可以使用onCreateView方法,然後使用此代碼也將有助於...

Intent intent = new Intent(getActivity(), FinalClass.class); 
getActivity().startActivity(intent); 

// Closing all the Activities 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

// Add new Flag to start new Activity 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
+0

這沒有任何更改。我得到了解決方案。不管怎樣,謝謝! :) –

+0

再次使用這也將完美運行我正在使用此 –

0

最後,我找到了解決方案。我正在使用錯誤的onCreate方法。

之前,我有:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     final View inflaterFinalClass = inflater.inflate(R.layout.activity_final_class, null); 
     return inflaterFinalClass; 

,但我應該使用:

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_final_class); 
} 

所以,最後,我用了一個片段,而不是onCreate方法的onCreate方法爲活動。

+0

這就是我回答 –

+0

@BurhanuddinRashid哦,對不起。我正在寫它,並沒有看到你的答案,但你的評論指出我得到解決方案,當我意識到這可能是我創建活動的方式的問題。 –

+0

@BurhanuddinRashid是的,我還是不能接受。現在我做到了。無論如何,我會保持我的答案。也許它也可以幫助更多的人。 –

1

您無法使用片段實例從片段開始活動,但您可以使用片段容器活動實例開始活動。 例如:假設說活動A具有片段Abc,所以你必須使用活動A的實例不Fragment abc。

通過這樣做,您的上一個片段中將會有無效,因爲它位於Activity的頂部,而不是替換或添加現有的Fragment。如果你想要做在現有片段的一些變化,那麼你必須重寫onActivityResult

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

:)GlbMP