2011-12-08 169 views
7

如何在Android中實現顯示和隱藏片段片段?我在活動中添加了兩個片段。一個包含菜單和一個片段的片段包含子菜單。我在菜單片段中有很多按鈕,比如家,想法等。如果我點擊創意按鈕。我必須顯示子菜單。如果我再次點擊創意按鈕,我必須隱藏子菜單。任何人都可以提供示例,或者如何訪問另一個片段中的一個視圖片段?如何在Android中實現顯示和隱藏片段片段

這是我的佈局主要

?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
<fragment class="com.gcm.fragment.CommonFragment" 
      android:id="@+id/the_frag" 
      android:layout_width="wrap_content" 
      android:layout_height="match_parent" /> 
<fragment class="com.gcm.fragment.SubFragment" 
      android:id="@+id/the_frag1" 
      android:layout_marginTop="130dip" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" />    


</LinearLayout> 

在我的片段

package com.gcm.fragment; 
import android.app.Fragment; 
import android.app.FragmentManager; 
import android.app.FragmentTransaction; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.view.View.OnClickListener; 
import android.widget.TextView; 

public class CommonFragment extends Fragment implements OnClickListener { 
    TextView txtIhaveIdea=null; 
    boolean menuVisible=false; 
    public View onCreateView(final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) { 
     ViewGroup layout = (ViewGroup) inflater.inflate(R.layout.collapsed_menu2, container, false); 

     txtIhaveIdea=(TextView)layout.findViewById(R.id.txtIhaveAnIdea); 
     txtIhaveIdea.setOnClickListener(this); 

     return layout; 
     } 

    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     if(!menuVisible) 
     { 
     FragmentManager fm = getFragmentManager(); 
     FragmentTransaction ft = fm.beginTransaction(); 
     fm.beginTransaction(); 
     Fragment fragOne = new SubFragment(); 
     ft.show(fragOne); 
     } 
     else 
     { 
      FragmentManager fm = getFragmentManager(); 
      FragmentTransaction ft = fm.beginTransaction(); 

      fm.beginTransaction(); 
      Fragment fragOne = new SubFragment(); 
      ft.hide(fragOne); 
     } 

    } 



} 

感謝

+0

參考參考代碼片段顯示/隱藏在Android網站http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/FragmentHideShow.html給出 – potter

+0

@kumar你做到了嗎? – AndroidOptimist

回答

2

簡單,創造你的 「父母」 活動的公共方法。它隱藏了片段。

然後從您的點擊事件中的片段中獲取「parent |」活動中,投它,然後調用該方法所創建。

((ParentActitity)getActivity()).hideFragment(); 
0

你需要使用一個接口與父活動進行溝通。

就以Vogella的教程,「3.4一看。與碎片」應用的通信。這裏是link

2

你可以嘗試得到的FrameLayout或ID片段,並改變其知名度

View frag = findViewById(R.id.my_fragment); 
frag.setVisibility(View.VISIBLE); 
5

考慮這個問題已經在2K ..答案仍可能幫助新讀者如此這裏有雲:

  • 你真的不希望有FragmentManager和FragmentTransactions發生內部片段不具有強制類型轉換,也沒有潛在的有害引用您的活動(S)

所以我做什麼和工作得很好,設置接口的片段,並給出一個方法,說needsHide():

public class MyFrag extends Fragment { 

public interface MyFragInterface { 

    public void needsHide(); 
} 

然後實現它在你的活動:

public class MainActivity extends FragmentActivity implements MyFrag.MyFragInterface { 
public void needsHide() { 

FragmentManager fragmentManager = getSupportFragmentManager(); 
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
    //find the fragment by View or Tag 
    MyFrag myFrag = (MyFrag)fragmentManager.findFragmentByTag(SOME_TAG); 
    fragmentTransaction.hide(myFrag); 
    fragmentTransaction.commit(); 
     //do more if you must 
}} 

唯一需要考慮的部分是何時調用needsHide(),你可以在Fragment的onViewCreated中執行此操作,因爲您確定現在爲您的MainActivity提交事務還爲時過早。如果你把它的onCreate(),它可以不依賴於你oter片段做什麼工作:

@Override 
public void onViewCreated(View view, Bundle savedInstanceState) { 

    // Making sure Main activity implemented interface 
    try { 
     if (USE_A_CONDITION) { 
      ((MyFragInterface)this.getActivity()).needsHide(); 
     } 
    } catch (ClassCastException e) { 
     throw new ClassCastException("Calling activity must implement MyFragInterface"); 
    } 
    super.onViewCreated(view, savedInstanceState); 
} 
0

方法hide():隱藏現有的片段。這隻與視圖已添加到容器的片段相關,因爲這會導致視圖被隱藏。

代碼:

@Override 
public void onClick(View v) { 
    if(!menuVisible) 
    { 
    FragmentManager fm = getFragmentManager(); 
    FragmentTransaction ft = fm.beginTransaction(); 
    fm.beginTransaction(); 
    Fragment fragOne = new SubFragment(); 
    ft.show(fragOne); 
    } 
    else 
    { 
     FragmentManager fm = getFragmentManager(); 
     FragmentTransaction ft = fm.beginTransaction(); 

     fm.beginTransaction(); 
     // it's wrong , you just hide the fragment that not added to FragmentTransaction 
     Fragment fragOne = new SubFragment(); 
     ft.hide(fragOne); 
    } 

} 
-3

下面的代碼爲我工作..

View frag = findViewById(R.id.fragment); 
frag.setVisibility(View.GONE);//Or View.INVISBLE