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