Android的Fragment中的互相通信-桥梁activity

Android的Fragment中的互相通信-桥梁activity

效果图如下:

项目结构图如下:

Fragment1:

package com.demo.fragmenttongxin;

import android.app.Activity;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;

public class Fragment1 extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater,  ViewGroup container, Bundle savedInstanceState) {
        final View view = inflater.inflate(R.layout.fragment1, null);

        //找到按钮
        Button updBtn = view.findViewById(R.id.btn_update);

        updBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Fragment2 fragment2 = (Fragment2) getActivity().getFragmentManager().findFragmentByTag("f2");

                //修改2
                fragment2.updateText("修改了哦");

            }
        });

        return view;

    }
}

Fragment2:

package com.demo.fragmenttongxin;

import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class Fragment2 extends Fragment {
    TextView tv_content;

    @Override
    public View onCreateView(LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment2, null);
        //找到tv
         tv_content = view.findViewById(R.id.tv_content);
        return view;

    }

    //修改textView的内容
    public  void updateText(String content){
        tv_content.setText(content);

    }

}

MainActivity:

package com.demo.fragmenttongxin;

import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //获取fragment管理者
        FragmentManager fragmentManager = getFragmentManager();

        //2.开启一个事务
        FragmentTransaction beginTransaction = fragmentManager.beginTransaction();

        beginTransaction.replace(
                R.id.ll1,new Fragment1(),"f1"
        );

        beginTransaction.replace(
                R.id.ll2,new Fragment2(),"f2"
        );

        //3.开启事务
        beginTransaction.commit();

    }
}

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    tools:context=".MainActivity">

 <LinearLayout
     android:id="@+id/ll1"
     android:layout_width="0dp"
     android:layout_weight="1"
     android:layout_height="match_parent">

 </LinearLayout>

 <LinearLayout
     android:id="@+id/ll2"
     android:layout_width="0dp"
     android:layout_weight="1"
     android:layout_height="match_parent">

 </LinearLayout>

</LinearLayout>

fragment1.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >

    <Button
        android:id="@+id/btn_update"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="修改"
        />

</LinearLayout>

fragment2.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

<TextView
    android:id="@+id/tv_content"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="hello world !"

    />

</LinearLayout>

原文地址:https://www.cnblogs.com/charlypage/p/10354849.html

时间: 2025-01-05 21:01:02

Android的Fragment中的互相通信-桥梁activity的相关文章

Android 在Fragment中执行onActivityResult不被调用的简单解决方法

在Android开发中,我们经常会用到FragmentActivity下嵌套多个Fragment,但是在开发过程中会发现在嵌套的Fragment中使用onActivityResult回调方法没有被执行. 网上也有很多解决方法,但是说的都比较麻烦,所以今天给大家推荐一种超简单的用法, 在Fragment和FragmentActivity中都要重写onActivityResult方法,并且要保证两者的请求码或者结果码一致.代码如下: 在FragmentActivity中 @Override prot

android,在fragment中使用listview,不使用listfragment

public class LeftFragment extends Fragment{ private ListView listView; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.lesson_table_left, null); listV

Android 在 Fragment 中使用 getActivity() NullPointException 的思考和解决办法

问题: 使用 AS 在 Fragment 中调用 getActivity() 方法的时候会出现可能为空指针的提醒 使用 monkey 多次十万次测试,会出现 getActivity() NullPointException 的情况 思考 为什么会出现这种情况,按说当前 Activity 存在,在 Fragment 中使用 getActivity() 是可以拿到的,不应该为空的 源码 fragment 的生命周期 以下源码基于 API 26 getActivity 可能为 Null, 跟进源码,可

Android的Fragment中onActivityResult不被调用的解决方案

常见的,我们会在FragmentActivity中嵌套一层Fragment使用,甚至两次或多层Fragment嵌套使用.这个时候,在第二级或者更深级别的Fragment调用startActivityForResult方法时,将无法收到onActivityResult回调.阅读FragementActivity源码后发现,原来是源码里没有处理嵌套Fragment的情况,也就是说回调只到第一级Fragment,就没有继续分发.我们可以实现一个自己的AppCompatActivity,来实现继续分发,

android 在Fragment 中使用ormlite 数据库

在ormlite官方的demo中,Activity 中访问数据库是extends ormliteBaseActivity. 那在Fragment中怎么使用呢? 简单的: public class OrmLiteFragment extends Fragment {     private DatabaseHelper databaseHelper = null;     protected DatabaseHelper getHelper() {         if (databaseHelp

Android的Fragment中onActivityResult不被调用的解决方案(绝对管用)

常见的,我们会在FragmentActivity中嵌套一层Fragment使用,甚至Fragment下层层嵌套使用.这个时候,在第二级或者更深级别的Fragment将无法收到onActivityResult回调,查看FragementActivity的源码发现: public void startActivityFromFragment(Fragment fragment, Intent intent, : int requestCode) { : if (requestCode == -1)

Android 在fragment中实现返回键单击提醒 双击退出

尝试用mvp架构加dagger2来重写了一下,大致功能都实现了,还没有全部完成. 项目地址 接近完成的时候,想在天气信息页面实现一个很常见的功能,也就是点击屏幕下方的返回键的时候不是返回到上一个activity或者退出,而是提醒用户再按一次就会退出. 实现思路也很简单,就是对返回键的动作进行监听和拦截,然后重写成需要的动作,因为在我的程序中activity只作为调度器使用,真正的View功能在fragment中,所以返回键的动作捕捉只能以接口形式 BaseFragment实现这个接口,代码如下:

Fragment中启动一个新的Activity

最近遇到一个小问题,就是我在主界面中用的是Fragment,其中四个Fragment,然后打算在其中一个里边,写一个TextView(准确地说是Linearout)的单击事件,然后跳转到另外一个Activity,但是问题来了,不知道在哪个函数中去写. 平时我们的Activity都是重载onCreate()函数,但是在Fragment中重载的是onCreateView()函数,后来查了很多资料,大多都是两行代码或者几行代码,也弄不清具体怎么写,知道看到了一个博主的博客,Ta贴出来的整个代码(这里还

[Android Pro] Fragment中使用SurfaceView切换时闪一下黑屏的解决办法

方法一.在Activity的onCreate中添加如下代码 getWindow().setFormat(PixelFormat.TRANSLUCENT); reference to :  http://www.jb51.net/article/72719.htm