今天讲一下Android的Activity获取fragment和fragment的组件:

一.获取fragment:
当fragment被提交之后,即可通过以下两种方法获取fragment:
1.findFragmentById();
2.findFragmentByTag(String tag);
【fragmentTransaction.commit()提交fragment是异步处理的】

二.获取fragment的组件:
1.重写onStart()方法或onResume()【不能写在onCreate()中,因为该方法被调用时还无法相互获取对方组件】
2.直接通过findViewById()获取fragment的组件

看一下运行截图:

MainActivity.java:
注释写在程序中了

package activity.wyc.com.fragmentdemo0305;import android.app.FragmentManager;import android.app.FragmentTransaction;import android.os.Bundle;import android.support.v7.app.ActionBarActivity;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;import com.vrinux.fragment.Fragment01;import com.vrinux.fragment.Fragment02;public class MainActivity extends ActionBarActivity {    //private String TAG = "MainActivity";    private Button btnObj;    private FragmentManager fragmentManager = getFragmentManager();    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        Fragment01 fragment01 = new Fragment01();        Fragment02 fragment02 = new Fragment02();        FragmentTransaction fragmentTransaction =fragmentManager.beginTransaction();        /**         * fragmentTransaction.replace(R.id.fm01id,fragment01,"fragment01Tag");         * R.id.fm01id 既是是加载fragment的容器的id,当加载后也既是所加载fragment的id         * "fragment01Tag"是对fragment01的标记         */        fragmentTransaction.replace(R.id.fm01id,fragment01,"fragment01Tag");        fragmentTransaction.replace(R.id.fm02id,fragment02,"fragment02Tag");        fragmentTransaction.commit();        /**         * 当fragment被提交之后,即可通过以下两种方法获取fragment;【fragmentTransaction.commit()提交fragment是异步处理的,所以获取fragment时要注意】         * Fragment01 fragment01 = (Fragment01)fragmentManagerObj.findFragmentByTag("fragment01Tag");         *     或         * Fragment01 fragment01 = (Fragment01)fragmentManagerObj.findFragmentById(R.id.fm01id);         */    }    /**     * 重写onStart()方法,因为从fragment的生命周期可以知道当Activity的onCreate(Bundle savedInstanceState)中还无法获取fragment的布局的组件     */    @Override    protected void onStart() {        super.onStart();        btnObj = (Button)findViewById(R.id.btnid);        btnObj.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                /**                 * 可以直接通过findViewById()获取fragment的组件,因为fragment本身就是Activity的一部分(“碎片”/“片段”);                 * 因为Activity和fragment要从fragment的onActivityCreate()生命周期方法之后才能相互获取对方布局中的组件,                 *      所以在fragment中获取Activity的组件最早只能在onActivityCreate()中获取,而Activity最早只能在onStart()中获取;                 */                EditText fm01etObj =(EditText)findViewById(R.id.fm01etid);                String str = fm01etObj.getText().toString();                TextView fm02tvObj =(TextView)findViewById(R.id.fm02tvid);                fm02tvObj.setText(str);            }        });    }}

Fragment01.java:

package com.vrinux.fragment;import android.app.Fragment;import android.os.Bundle;import android.support.annotation.Nullable;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;import activity.wyc.com.fragmentdemo0305.R;/** * Created by yc on 2015/3/5. */public class Fragment01 extends Fragment {    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {        View view = inflater.inflate(R.layout.fragment01layout, null);        return view;    }}

Fragment02.java:

package com.vrinux.fragment;import android.app.Fragment;import android.os.Bundle;import android.support.annotation.Nullable;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;import activity.wyc.com.fragmentdemo0305.R;/** * Created by yc on 2015/3/5. */public class Fragment02 extends Fragment {    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {        View view = inflater.inflate(R.layout.fragment02layout, null);        return view;    }}

activity_main.xml

<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:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    android:paddingBottom="@dimen/activity_vertical_margin"    android:orientation="vertical"    tools:context=".MainActivity">    <FrameLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:id="@+id/fm01id">FrameLayout>    <Button        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:textSize="20sp"        android:id="@+id/btnid"        android:text="将fragment01的EditText的值传给fragment02的textview"        />    <FrameLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:id="@+id/fm02id">FrameLayout>LinearLayout>

fragment01layout.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:background="#00ffff"    android:orientation="vertical"    >    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:textSize="20sp"        android:text="我是fragment01"/>    <EditText        android:layout_width="200dp"        android:layout_height="wrap_content"        android:textSize="30sp"        android:id="@+id/fm01etid"/>LinearLayout>

fragment02layout.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:background="#ffff00"    android:orientation="vertical"    >    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="我是fragment02"        android:textSize="20sp"        />    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:textSize="30sp"        android:id="@+id/fm02tvid"/>LinearLayout>

更多相关文章

  1. 关于Android(安卓)ListView组件中android:drawSelectorOnTop含
  2. Android(安卓)NDK c调用java代码
  3. Binder 简介
  4. Bitmap和Drawable相互转换方法
  5. Android(安卓)EventBus 源码解析
  6. android onSaveInstanceState方法 横坚屏切换
  7. 浅谈Java中Collections.sort对List排序的两种方法
  8. Python list sort方法的具体使用
  9. python list.sort()根据多个关键字排序的方法实现

随机推荐

  1. Android JNI入门第一篇——HelloJni
  2. Android 学习手札(三) 视图(View)
  3. Android测试教程(3):测试项目
  4. Android原子操作的实现原理
  5. Android屏幕适配全攻略(最权威的官方适配
  6. Android之——流量管理程序示例
  7. Android之利用SQLite数据库实现登陆和注
  8. Android开机动画bootanimation.zip
  9. Android : 如何在WebView显示的页面中查
  10. Android设置默认Launcher