Android中Activity和Fragment之间数据传递(例子中也有事务加载Fragment)

来源:互联网 发布:杭州淘宝运营招聘 编辑:程序博客网 时间:2024/04/30 03:21

activity中拿到Fragment的数据

          在Activity中

// R.id.activity_fragment_layout是在activity布局中加载碎片的布局,是activity中的布局。
  MyFragment myfragment = (MyFragment) getFragmentManager()
 .findFragmentById(R.id.activity_fragment_layout);

         得到Fragment对象,就能调用碎片中的方法了

Fragment中拿到activity的数据

         在Fragment中

         MainActivity mainActivity = (MainActivity) getActivity();

          得到Activity对象,就能调用碎片中的方法了

下面是一个完整的例子,完整复制就能运行

效果


项目结构


布局

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:orientation="vertical" >
    <TextView 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Activity界面"
        android:textSize="20sp"
        android:gravity="center_horizontal"       
        />
   
      <Button 
          android:id="@+id/activity_btn_tianjiasuipian"
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:text="添加碎片"
          />
      <Button 
          android:id="@+id/activity_btn_nadaoshuju"
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:text="Activity拿到fragment中的数据"         
          />
       
    <LinearLayout
        android:id="@+id/activity_fragment_layout"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >


        <EditText
            android:id="@+id/activity_et_nianling"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="在activity中输入年龄"
            />


          
       
        
    </LinearLayout>


</LinearLayout>

fragment_my.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"
    android:background="#66669999"   
    >
    <TextView 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="fragment界面"
        android:textSize="20sp"
        android:gravity="center_horizontal"        
        />
    <Button
        android:id="@+id/fragment_my_btn"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="在fragment中拿到activity中的数据" />
   
    <EditText
        android:id="@+id/fragment_my_edittext"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="在fragment中输入姓名"
        />
</LinearLayout>

java代码:

MainActivity

package com.zhh.android;


import java.util.HashMap;


import android.os.Bundle;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;


public class MainActivity extends Activity implements OnClickListener {
private Button btn_tianjiasuipian;
private Button btn_nadaoshuju;
private EditText et_nianling;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_tianjiasuipian = (Button) findViewById(R.id.activity_btn_tianjiasuipian);
btn_nadaoshuju = (Button) findViewById(R.id.activity_btn_nadaoshuju);
et_nianling = (EditText) findViewById(R.id.activity_et_nianling);
btn_tianjiasuipian.setOnClickListener(this);
btn_nadaoshuju.setOnClickListener(this);
getActivityData();
}


/**
* 监听事件
*/
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.activity_btn_tianjiasuipian:
// 加载碎片
MyFragment fragment = new MyFragment();
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction transaction = fragmentManager
.beginTransaction();
transaction.replace(R.id.activity_fragment_layout, fragment);
transaction.commit();
break;


case R.id.activity_btn_nadaoshuju:
// R.id.activity_fragment_layout是在activity布局中加载碎片的布局
MyFragment myfragment = (MyFragment) getFragmentManager()
.findFragmentById(R.id.activity_fragment_layout);


Log.i("1", "碎片对象" + myfragment);
if (null == myfragment.getFragmentData().get("name").toString()
.trim()
&& "".endsWith(myfragment.getFragmentData().get("name")
.toString().trim())) {
Toast.makeText(this, "没有数据", 10).show();
return;


}
String nameStr = myfragment.getFragmentData().get("name")
.toString().trim();
Toast.makeText(this, "拿到的数据" + nameStr, 10).show();
Log.i("1", "拿到的数据" + nameStr);
break;


}


}


public HashMap<String, Object> getActivityData() {
String etAgeStr = et_nianling.getText().toString().trim();
HashMap<String, Object> ageStr = new HashMap<String, Object>();
ageStr.put("age", etAgeStr);
return ageStr;


}


}// class

MyFragment

package com.zhh.android;


import java.util.HashMap;
import java.util.Map;


import android.app.Activity;
import android.app.Fragment;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.webkit.WebView.FindListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;


public class MyFragment extends Fragment {
private Button fragment_button;
private EditText fragment_editText;


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_my, container, false);
fragment_button = (Button) view.findViewById(R.id.fragment_my_btn);
fragment_editText = (EditText) view
.findViewById(R.id.fragment_my_edittext);
return view;
}





/**
* 确保和碎片关联的activity创建完成后调用
*/
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
getFragmentData();
fragment_button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
MainActivity mainActivity = (MainActivity) getActivity();
if (null == mainActivity.getActivityData().get("age")
.toString().trim()
&& "".equals(mainActivity.getActivityData().get("age")
.toString().trim())) {
Toast.makeText(getActivity(), "没有数据", 10).show();
return;


}
String dataStr = mainActivity.getActivityData().get("age")
.toString().trim();
Toast.makeText(getActivity(), "碎片拿到activity中的数据" + dataStr, 10)
.show();
Log.i("1", "碎片拿到activity中的数据" + dataStr);


}
});


}
    /**
     * 
     * 保存输入框的数据
     */
public HashMap<String, Object> getFragmentData() {
String nameStr = fragment_editText.getText().toString().trim();
HashMap<String, Object> mapStr = new HashMap<String, Object>();
mapStr.put("name", nameStr);
return mapStr;


}


}

主清单文件中注册activity

 <activity
            android:name="com.zhh.android.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />


                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>



Android中在xml中静态添加Fragment
http://blog.csdn.net/zhaihaohao1/article/details/42100467
 Android中在代码中动态(用事物)添加Fragment
http://blog.csdn.net/zhaihaohao1/article/details/42100827



0 0