您的位置:首页 > 移动开发 > Android开发

Android_Fragment和Activity之间的通信

2014-12-05 13:51 375 查看
Fragment 的生命周期是随着activity变化而变化的。

如果activity要给在运行的时候给fragment传人数据则需要fragment实现一个自定义的接口,并且实现接口里面的方法,在activity里面保存这个接口并且在需要传人数据的时候调用这个方法即可。

如果fragment运行的时候需要给activity传数据了?activity先实现这个接口,然后在fragment里面重写onAttach(Activity act)这个方法,并在这个方法里面讲activity强制转换为接口类,然后在fragment使用的时候调用这个接口类的方法。

请看下面的例子:

activity给fragment里面传人数据:

public class MainActivity extends Activity{
private TestFragment fragment;//fragment
private UpdateFragment updateFragment;//fragment实现的接口
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
initView();

}
private void initView() {
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragment = new TestFragment();
updateFragment = fragment;
fragmentTransaction.add(R.id.main, fragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commitAllowingStateLoss();
}
@Override
protected void onResume() {
//改变fragment里面textView的值
updateFragment.setData("王五");
super.onResume();
}

}


接口类

public interface UpdateFragment {
void setData(String str);
}


Fragment类:

public class TestFragment extends Fragment implements UpdateFragment{

private View view;
private TextView txt;
public TestFragment() {
super();
}

@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
}

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if (null == view){
view = inflater.inflate(R.layout.activity_main, container, false);
txt = (TextView)view.findViewById(R.id.tv);
}
return view;
}
@Override
public void setData(String str) {
if (null != txt) {
txt.setText(str);
}
}

}


Fragment给activity传入数据demo:

Activity类:

public class MainActivity extends Activity implements UpdateFragment{
private static final String TAG = MainActivity.class.getSimpleName();
private TestFragment fragment;//fragment
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
initView();

}
private void initView() {
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragment = new TestFragment();
fragmentTransaction.add(R.id.main, fragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commitAllowingStateLoss();
}
@Override
protected void onResume() {
super.onResume();
}
@Override
public void setData(String str) {
if (null != str ){
Log.d(TAG, "setData:"+str);
}
}


接口类和上面的是一样的就不写了

Fragment类:

public class TestFragment extends Fragment{

private View view;
private TextView txt;
private Button btn;
private UpdateFragment updateFragment;
public TestFragment() {
super();
}

@Override
public void onAttach(Activity activity) {
try {
updateFragment = (UpdateFragment)activity;
} catch (Exception e) {
e.printStackTrace();
}
super.onAttach(activity);
}

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if (null == view){
view = inflater.inflate(R.layout.activity_main, container, false);
txt = (TextView)view.findViewById(R.id.tv);
btn = (Button)view.findViewById(R.id.btn);
btn.setOnClickListener(clickListener);
}
return view;
}
private OnClickListener clickListener = new OnClickListener() {
@Override
public void onClick(View v) {
if (null != txt) {
updateFragment.setData(txt.getText().toString());
}

}
};

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: