2017-02-27 91 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