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