2017-02-27 125 views
0

我尝试使用片段更改我的应用程序的视图。 我在这几天尝试过,所以我做了一个干净的代码来呈现我的问题。 我有一个选项菜单的MainActivity,在这个选项菜单中我有一个名为“action_connect”的项目。 我的应用程序的第一个视图应显示“欢迎来到MainActivity!”。 当有人点击“action_connect”项目时,我希望视图更改为我的片段,其中“welcome to Fragment!”应该显示。 问题:片段覆盖活动文本而不是切换到新视图。切换显示活动视图片段视图

我希望你能帮我解决这个问题。提前致谢。

继承人我的代码:

MainActivity:

public class MainActivity extends AppCompatActivity { 

@Override 
public void onCreate(Bundle savedInstance){ 
    super.onCreate(savedInstance); 
    setContentView(R.layout.main_activity); 



} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main_menu, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 

    FragmentManager fm = getFragmentManager(); 
    FragmentTransaction ft = fm.beginTransaction(); 

    MainActivityFragment mMainActivityFragment = new MainActivityFragment(); 

    int id = item.getItemId(); 

    if (id == R.id.action_connect) { 

     ft.replace(R.id.default_container, mMainActivityFragment); 
    } 


    ft.commit(); 
    return super.onOptionsItemSelected(item); 

} 

片段:

public class MainActivityFragment extends Fragment{ 

@Override 
public void onCreate(Bundle savedInstance){ 
    super.onCreate(savedInstance); 



} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState){ 


    View rootView = inflater.inflate(R.layout.fragment_connect, parent, false); 

    return rootView; 
} 

}

片段-XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<TextView 
    android:text="Welcome in Fragment!" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/textView" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="36dp" /> 

活动-XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" android:layout_height="match_parent"> 

<FrameLayout 
    android:id="@+id/default_container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"></FrameLayout> 

    <TextView 
     android:text="Welcome in MainActivity!" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/textView" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="36dp" /> 


</RelativeLayout> 

回答

1

由于塞德里克说,它是正确的,就看不清叠加元素/片段/活动只需添加一个背景颜色将XML在您的片段:在你的代码的结束

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent" android:background="@color/white"> 

只需添加一个结束()并删除标志,这将破坏ViewActivity,它将从您的堆栈中删除!

请参阅https://stackoverflow.com/a/38376737/4230939

+0

你的意思是什么标志,我如何实现“finish();”究竟在哪里? – keko

+0

谢谢,这工作! :-) – keko

+0

对不起,我看了你的问题。对于您的应用程序,您不必担心删除标志或添加完成()。只使用背景颜色。 –

0

好了,所以你在做什么错。这里发生的是片段的正常行为,这就是它应该如何使用的。

碎片是活动的一部分,它们就像法线一样,除了像生命周期一样的活动。你不能创建一个没有活动的片段,它必须附加到一个活动上,生命周期方法甚至称为onAttach()这个片段指的是片段附加到一个活动上的时刻。

我强烈建议更换您了解更多关于片段在这里:

https://developer.android.com/guide/components/fragments.html

你可能想要的是只是切换到第二个活动,以显示新的内容,并擦除先前的而不是叠加是在上面。

+0

我想切换视图的片段。长期目标是在ONE活动中切换不同的片段。我只是不知道该怎么做,因为我缺乏经验。 – keko

+0

你在这里用你的片段替换了视图(不是活动)default_container –

+0

我怎样才能使用我的片段替换活动视图?所以它不会覆盖?或者我的方法错了? – keko