2011-12-08 10 views
7

Androidの断片の中に断片を表示して隠す方法は?私は2つの断片を活動の中に加えました。メニューを含む1つのフラグメントと1つのフラグメントには、サブメニューが含まれています。私は家、アイデアなどのようなメニューの断片にたくさんのボタンを持っています。アイディアボタンをクリックすると。私はサブメニューを表示する必要があります。もう一度アイデアボタンをクリックすると、サブメニューを非表示にする必要があります。誰かが例を提供することができますか、別のフラグメントの1つのビューフラグメントにアクセスする方法はありますか?どのようにして、アンドロイドの断片内に断片を表示して隠すようにする

これはあなたの "親" の活動にパブリックメソッドを作成し、私のフラグメントで

?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

は、フラグメントのコードを参照するために参照してくださいhttp://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/FragmentHideShow.htmlアンドロイドのサイトで与えられた/ショーを隠します – potter

+0

@kumarはUの仕事を達成しましたか? – AndroidOptimist

答えて

2

私のレイアウトです。断片を隠す。

クリックイベントのフラグメント内から、 "parent |"活動は、あなたが作成したメソッドを呼び出して、それをキャストして。

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

あなたはあなたの親のアクティビティと通信するためのインターフェイスを使用する必要があります。

をVogellaのチュートリアル、「3.4上を見てみましょう。フラグメントを使用したアプリケーションの通信は、」。ここでは、idででframeLayout又はその断片を取得しようとすると、この質問は、2Kの上に...答えはまだので、新しい読者を助けるかもしれないしている考えるとその可視性

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

ですここでは行く:

  • あなたが本当に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()を呼び出すときだけです。これは、MainActivityがトランザクションをコミットするのが早すぎるとは確信していないため、フラグメントのonViewCreatedで行う可能性があります。あなたが)(それをの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 
関連する問題