Activity中具体的方法实现要放到实现的接口方法中(回调),这样Fragment调用Acivity中的方法就可以游刃有余了
实例:两个Fragment依赖同一个Activity,点击AFragment的按钮改变BFragment上的TextView数据
Acitivity
package com.blzt.register.interfacecallback;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.view.View;
import com.blzt.register.R;
public class MainActivity extends FragmentActivity implements ChangeData {
FragmentOne one=new FragmentOne();;
FragmentTwo two=new FragmentTwo();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main1);
FragmentManager manager = this.getSupportFragmentManager();
manager.beginTransaction().add(R.id.content1, one, "FRAG_ONE").commit();
manager.beginTransaction().add(R.id.content2, two, "FRAG_TWO").commit();
}
public void go(View view){
onChangData();
}
@Override
public void onChangData() {
two.textView.setText("新的数据。。");
}
}
接口
package com.blzt.register.interfacecallback;
public interface ChangeData {
void onChangData();
}
FragmentOne
package com.blzt.register.interfacecallback;
import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import com.blzt.register.R;
/**
* Created by SJ on 2015/10/8.
*/
public class FragmentOne extends Fragment {
public TextView textView;
public Activity activity;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragmentone, container, false);
Button bt = (Button) view.findViewById(R.id.bt_fg1);
textView = (TextView) view.findViewById(R.id.tv_fg1);
bt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Fragment间的通信1,获取当前已经实现接口的Activity,回调其方法
((ChangeData) getActivity()).onChangData();
//Fragment间的通信2,通过getFragmentManager().findFragmentByTag来找到另外的Fragment
// FragmentTwo mFragmentTwo= (FragmentTwo)getFragmentManager().findFragmentByTag("FRAG_TWO");
// mFragmentTwo.textView.setText("88");
// new FragmentTwo().textView.setText("88");
// getActivity().
}
});
return view;
}
}
FragmentTwo
package com.blzt.register.interfacecallback;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.blzt.register.R;
/**
* Created by SJ on 2015/10/8.
*/
public class FragmentTwo extends Fragment {
public TextView textView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragmenttwo, container,false);
textView= (TextView) view.findViewById(R.id.tv_fg2);
return view;
}
}
布局文件Activity
<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"
tools:context=".MainActivity">
<LinearLayout
android:id="@+id/content1"
android:layout_width="match_parent"
android:layout_height="200dp"
android:orientation="horizontal"></LinearLayout>
<LinearLayout
android:id="@+id/content2"
android:layout_width="match_parent"
android:layout_height="200dp"
android:orientation="horizontal"></LinearLayout>
<Button
android:onClick="go"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="更改显示" />
</LinearLayout>
FragmentOne
<?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="#00ff00"
android:orientation="vertical">
<Button
android:id="@+id/bt_fg1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="点击ONE" />
<TextView
android:id="@+id/tv_fg1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="我是ONE" />
<SeekBar
android:id="@+id/seekBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal" />
</LinearLayout>
FragmentTwo
<?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="#ff0000"
android:orientation="vertical">
<Button
android:id="@+id/bt_fg2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="点击2" />
<TextView
android:id="@+id/tv_fg2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="我是TWO" />
<CheckBox
android:id="@+id/checkBox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New CheckBox" />
<CheckBox
android:id="@+id/checkBox2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New CheckBox" />
</LinearLayout>