Fragment用handler向Activity发送消息并调用Activity的Handler.Callback

原创 2016年06月01日 10:23:22

Fragment01中布局一个按钮。点击改按钮向Activity发送消息:隐藏Fragment01,显示Fragment02.


public class MainActivity extends AppCompatActivity implements Handler.Callback{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        ft.add(R.id.fragment01,new Fragment01(),"currentFragment");
        ft.commit();
    }

    @Override
    public boolean handleMessage(Message msg) {
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction ft = fragmentManager.beginTransaction();
        if (msg.what==1){
            ft.hide(fragmentManager.findFragmentByTag("currentFragment"));
            ft.add(R.id.fragment01,new Fragment02());
            ft.commit();
        }
        return false;
    }
}

public class Fragment01 extends Fragment {
    Handler.Callback callback;
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment,container,false);
    }

    //获取Fragment依附的activity
    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        this.callback= (Handler.Callback) activity;
    }

    @Override
    public void onStart() {
        super.onStart();
        Fragment fragment = getFragmentManager().findFragmentById(R.id.fragment01);
        View view = fragment.getView();
        Button button = (Button) view.findViewById(R.id.begin);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Handler handler = new Handler(callback);
                Message message = Message.obtain();
                message.what=1;
                handler.sendMessage(message);
            }
        });
    }
}

public class Fragment02 extends Fragment {
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment02,container,false);
    }
}


相关文章推荐

详解Fragment跟Activity之间的通信 利用handler fragment和activity双向发送消息

不会用handler。找了几个文章学习大多数都是写的activity向fragment发送消息的例子,终于找到一个fragment向activity发送消息的,粘过来学习一下。 原文:http://b...

Fragment和Activity交互(Handler方式)

  • 2015年07月24日 15:16
  • 1.38MB
  • 下载

工作线程中利用handler向主线程发送消息

首先,可以先了解下线程间通信时Message,Handler,MessageQueue,Looper之间的关系解释下. Handler获取当前线程中的looper对象,looper用来从存放Mess...

android 线程之间通过Handler发送消息

  • 2017年02月20日 11:44
  • 3.16MB
  • 下载

Android 利用handler发送消息:"This message is already in use"错误

问题出现的情况是,我在接收线程接收到消息后,需要发送到不同的页面,然后,就直接调用了各个页面的handler来发送了,结果报错,翻译过来也就是这个message已经用了,我解决的办法是给每个页面发送消...
  • Lu_Ca
  • Lu_Ca
  • 2017年08月02日 11:44
  • 173

299_Handler发送消息

Handler发送消息 阅读郭霖大神博客的读书笔记 博客地址:http://blog.csdn.net/sinyu890807/article/details/9991569 ...

Handler(15):工作线程向主线程发送消息

package com.example.handlersecond;import android.app.Activity; import android.os.Bundle; import andr...

Umeng用户反馈提示实现(Handler完成Activity和Fragment之间的通信)

Handler真的非常好用!!!先介绍一下写这个帖子的背景,由于需要完成这样一个需求,利用umeng的用户反馈,后台有新的消息来临的时候,用户打开app就能收到通知,并且在Activity中的Frag...

一、概述 EventBus是一款针对Android优化的发布/订阅事件总线。主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间

一、概述 EventBus是一款针对Android优化的发布/订阅事件总线。主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Fragment用handler向Activity发送消息并调用Activity的Handler.Callback
举报原因:
原因补充:

(最多只允许输入30个字)