目的:fragment向Activity传递信息,点击按钮 通过接口或者广播 传递信息
略解:activity_main中有一个LinearLayout(@+id/fragment_ll)的控件,此控件在MainActivity中通过getFragmentManager().beginTransaction()的replace(int,fragment)被自定义的MyFragment(继承自Fragment)代替。
接口传递:
在MyFragment中:
public interface Submit {
public void submit(String userStr, String passStr);
}
在OnAttch中:submit = (Submit) activity;
在按钮的点击响应事件中:
submit = (Submit) getActivity();
submit.submit(userEdt.getText().toString().trim(), passEdt .getText().toString().trim());
在MainActivity(implements Submit)中:
Fragment fragment = new MyFragment();
FragmentTransaction fm = getFragmentManager().beginTransaction();
fm.replace(R.id.fragment_ll, fragment);
fm.commit();
intentFilter = new IntentFilter();
intentFilter.addAction("android.text_change");
broadReceiver = new BroadReceiver();
registerReceiver(broadReceiver, intentFilter);
@Override
public void submit(String userStr, String passStr) {
txt.setText(userStr+","+passStr);
}
广播传递:
在MyFragment中:
Intent intent = new Intent("android.text_change");
intent.putExtra("text", userEdt.getText().toString()+","+passEdt.getText().toString());
getActivity().sendBroadcast(intent);
在MainActivity中:
Fragment fragment = new MyFragment();
FragmentTransaction fm = getFragmentManager().beginTransaction();
fm.replace(R.id.fragment_ll, fragment);
fm.commit();
intentFilter = new IntentFilter();
intentFilter.addAction("android.text_change");
broadReceiver = new BroadReceiver();
registerReceiver(broadReceiver, intentFilter);
public class BroadReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Bundle data= intent.getExtras();
txt.setText(data.getString("text"));
}
}
总代码如下:
MainActivity:
package com.example.tongxin;
import com.example.tongxin.MyFragment.Submit;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.Window;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity implements Submit {
TextView txt;
private IntentFilter intentFilter;
private BroadReceiver broadReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
initview();
intentFilter = new IntentFilter();
intentFilter.addAction("android.text_change");
broadReceiver = new BroadReceiver();
registerReceiver(broadReceiver, intentFilter);
}
private void initview() {
txt=(TextView) findViewById(R.id.txt);
Fragment fragment = new MyFragment();
FragmentTransaction fm = getFragmentManager().beginTransaction();
fm.replace(R.id.fragment_ll, fragment);
fm.commit();
}
@Override
public void submit(String userStr, String passStr) {
txt.setText(userStr+","+passStr);
}
public class BroadReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Bundle data= intent.getExtras();
txt.setText(data.getString("text"));
}
}
}
MyFragment.java:
package com.example.tongxin;
import android.app.Activity;
import android.app.Fragment;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
public class MyFragment extends Fragment {
Context context;
Submit submit;
EditText userEdt;
EditText passEdt;
Button inBtn;
Button brBtn;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.my_fragment, container, false);
context = getActivity();
return view;
}
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
initview();
}
@Override
public void onAttach(Activity activity) {
// TODO Auto-generated method stub
super.onAttach(activity);
submit = (Submit) activity;
}
public interface Submit {
public void submit(String userStr, String passStr);
}
private void initview() {
userEdt = (EditText) getView().findViewById(R.id.username_edt);
passEdt = (EditText) getView().findViewById(R.id.password_edt);
inBtn = (Button) getView().findViewById(R.id.interface_btn);
inBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
submit = (Submit) getActivity();
submit.submit(userEdt.getText().toString().trim(), passEdt
.getText().toString().trim());
}
});
brBtn = (Button) getView().findViewById(R.id.broadcast_btn);
brBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Intent intent = new Intent("android.text_change");
intent.putExtra("text", userEdt.getText().toString()+","+passEdt.getText().toString());
getActivity().sendBroadcast(intent);
}
});
}
}
activity_main.xml:
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.tongxin.MainActivity" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/txt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20dp"
android:text="这里的值将会改变" />
<LinearLayout
android:layout_marginTop="40dp"
android:id="@+id/fragment_ll"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
</LinearLayout>
</LinearLayout>
</RelativeLayout>
my_fragment.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" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<EditText
android:id="@+id/username_edt"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<EditText
android:id="@+id/password_edt"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/interface_btn"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="接口按钮" />
<Button
android:id="@+id/broadcast_btn"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="广播按钮" />
</LinearLayout>
</LinearLayout>