8

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);   
        }

    } 



}

ありがとう

4

6 に答える 6

5

フレームレイアウトまたはフラグメントをIDで取得して、その可視性を変更してみてください

View frag = findViewById(R.id.my_fragment);
frag.setVisibility(View.VISIBLE);
于 2013-03-15T17:03:02.377 に答える
2

単純に、「親」アクティビティにパブリック メソッドを作成します。フラグメントを隠します。

次に、クリックイベントのフラグメント内から「親|」を取得します アクティビティ、それをキャストしてから、作成したメソッドを呼び出します。

    ((ParentActitity)getActivity()).hideFragment();
于 2013-02-26T11:35:20.780 に答える
1

method 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);   
    }

} 
于 2016-03-01T03:28:59.973 に答える
1

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

Vogella のチュートリアル「3.4. Fragments を使用したアプリケーション通信」を参照してください。ここにリンクがあります

于 2013-02-26T11:40:51.000 に答える
-1

以下のコードは私のために働いた..

View frag = findViewById(R.id.fragment);
frag.setVisibility(View.GONE);//Or View.INVISBLE
于 2016-05-01T17:15:47.013 に答える