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
- Android中Activity和Fragment之间数据传递(例子中也有事务加载Fragment)
- Android-Activity与Fragment之间传递数据
- Android fragment和activity之间的数据传递交互
- Android Activity、Fragment之间的数据传递和返回
- fragment和activity之间的数据传递
- Fragment和Activity之间的数据传递
- Activity和Fragment之间的数据传递
- Activity 和 Fragment 之间的数据传递
- Fragment和Activity之间的数据传递
- Activity和fragment之间传递数据(一)
- Activity和fragment之间传递数据(二)
- Android中传递数据(Activity、Fragment)
- Android点滴-Activity和Fragment 传递数据
- Android activity Bundle和fragment数据传递
- Android中Fragment之间的跳转和数据的传递
- Fragment和Activity之间的数据传递(两种:Acitvity-->Fragment;Fragment---->Activity)
- Activity和Activity、Fragment之间传递数据的方式
- android中传递复杂参数,activity之间和fragment之间的bundle传递集合/对象
- Effective Java--枚举类型的
- ORACLE 创建作业JOB例子
- burp代理https报错
- 360谭晓生:安全体系已经从城墙防御变成塔防立体防御
- 努力吧,现在也不晚
- Android中Activity和Fragment之间数据传递(例子中也有事务加载Fragment)
- new 和 delete
- Android WebView Memory Leak WebView内存泄漏
- HTML5实现一根拉伸的橡皮筋
- Linux 查看端口被谁使用中
- android四大组件之activity(生命周期及状态)
- 利用cpu特性优化高性能程序
- iOS 10 Auto Layout界面自动布局系列2-使用Xcode的Interface Builder添加布局约束
- freeswitch 笔记