Fragment的隐藏与显示

package com.bwie.helpdemo;

import com.bwie.fragment.BillFrag;
import com.bwie.fragment.IndexFrag;
import com.bwie.fragment.TaskFrag;

import android.os.Bundle;
import android.app.Activity;
import android.content.SharedPreferences;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class IndexActivity extends FragmentActivity implements OnClickListener {

    private Button index_bill;
    private TextView index_home;
    private TextView index_task;

    private IndexFrag indexFrag;
    private BillFrag billFrag;
    private TaskFrag taskFrag;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_index);
        
        // 找控件
        findView();

        // 为布局添加fragment,开启事物
        FragmentManager fm = getSupportFragmentManager();
        FragmentTransaction tran = fm.beginTransaction();

        indexFrag = new IndexFrag();
        billFrag = new BillFrag();
        taskFrag = new TaskFrag();
        //R.id.relative为布局
        tran.add(R.id.relative, indexFrag, "index").show(indexFrag)
        .add(R.id.relative, billFrag, "bill").hide(billFrag)
        .add(R.id.relative, taskFrag, "task").hide(taskFrag);

        tran.commit();

        // 为按钮设置点击监听
        index_bill.setOnClickListener(this);
        index_home.setOnClickListener(this);
        index_task.setOnClickListener(this);
    }

    private void findView() {
        index_bill = (Button) findViewById(R.id.index_bill);
        index_home = (TextView) findViewById(R.id.index_home);
        index_task = (TextView) findViewById(R.id.index_task);

    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch (v.getId()) {
        case R.id.index_bill:
            // 获取事物
            FragmentManager fm_1 = getSupportFragmentManager();
            FragmentTransaction tran_0 = fm_1.beginTransaction();
            tran_0.show(billFrag).hide(indexFrag).hide(taskFrag).commit();

            break;

        case R.id.index_home:
            FragmentManager fm_2 = getSupportFragmentManager();
            FragmentTransaction tran_1 = fm_2.beginTransaction();
            tran_1.show(indexFrag).hide(billFrag).hide(taskFrag).commit();

            break;
        case R.id.index_task:
            FragmentManager fm_3 = getSupportFragmentManager();
            FragmentTransaction tran_2 = fm_3.beginTransaction();
            tran_2.show(taskFrag).hide(billFrag).hide(indexFrag).commit();
            break;
        }

    }
}

 

Android中,你可以使用Fragment的`ViewTreeObserver`来监听其显示隐藏的变化。首先,你需要在Fragment的初始化或生命周期方法中设置`ViewTreeObserver`: ```java // 在onActivityCreated()或者onViewCreated()方法中添加 getActivity().getWindow().addWindowObserver(new WindowObserver() { @Override public void onWindowVisibilityChanged(int visibility) { super.onWindowVisibilityChanged(visibility); if (visibility == View.VISIBLE) { // 当窗口变为可见时 startListening(); // 开始监听显示变化 } else if (visibility == View.GONE || visibility == View.INVISIBLE) { // 当窗口变为不可见时 stopListening(); // 停止监听 } } private void startListening() { // 在这里开始你的监听逻辑,比如添加一个FragmentTransaction的监听器 FragmentManager fragmentManager = getFragmentManager(); fragmentManager.registerFragmentLifecycleCallbacks(new FragmentLifecycleCallback(), true); } private void stopListening() { // 当不再需要监听时,移除生命周期回调或者销毁观察者 FragmentManager fragmentManager = getFragmentManager(); fragmentManager.unregisterFragmentLifecycleCallbacks(lifecycleCallback); getActivity().getWindow().removeWindowObserver(this); } }); ``` 在这个例子中,`startListening()`会注册`FragmentLifecycleCallback`来跟踪Fragment的生命周期变化,包括隐藏显示。`stopListening()`则是在不需要监听时将其注销。 请注意,`WindowObserver`的监听可能会受到系统某些操作的影响,例如切换到其他应用或按下Home键。如果你只关心用户交互导致的隐藏显示,那么可以考虑使用`GestureDetector`或者其他专门用于触摸事件的工具。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值