Fragment的接口回调

来源:互联网 发布:不用网络的跑酷游戏 编辑:程序博客网 时间:2024/06/06 01:31

重点介绍Fragment碎片与activity的数据交互,fragment在Android开发中起着至关重要的作用,通过官方Android api我们可以看到,fragment有着自己的生命周期并依赖于它绑定的activity的生命周期而存在,那样activity与fragment怎样进行数据交互呢?

MainActiivity的代码:

package com.example.fragment;

import com.example.fragment.Fragment.Callback;

import android.os.Bundle;
import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity {
private FragmentManager manager;// 创建fragment管理
private FragmentTransaction transaction;// 创建fragment的事物
private EditText editText;
private Button button;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = (EditText) this.findViewById(R.id.editText2);
button = (Button) this.findViewById(R.id.button1);
manager = getFragmentManager();
transaction = manager.beginTransaction();
final Fragment02 fragment02 = new Fragment02();
transaction.add(R.id.left, fragment02, “left”);
transaction.commit();
// 不管要实现怎样的功能都必须调用以下三个方法
// manager=getFragmentManager();
//transaction=manager.beginTransaction();
// transaction.commit();提交数据
button.setOnClickListener(new View.OnClickListener() {

  @Override  public void onClick(View arg0) {    // TODO Auto-generated method stub    //通过callback机制得到fragment的数据    fragment02.getString(new Callback() {      @Override      public void getString(String msg) {        // TODO Auto-generated method stub        editText.setText(msg);      }    });  }});

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}

Fragment02的代码:

package com.example.fragment;

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.ViewGroup;
import android.widget.Button;
import android.widget.EditText;

public class Fragment02 extends Fragment {
private Button button;
private EditText editText;

@Override
public void onAttach(Activity activity) {
// TODO Auto-generated method stub
super.onAttach(activity);
}

@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
}

// 在该方法中更新UI
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.left, null);
button = (Button) view.findViewById(R.id.button1);
editText = (EditText) view.findViewById(R.id.editText1);
button.setOnClickListener(new View.OnClickListener() {

  @Override  public void onClick(View arg0) {    //通过getActivity方法得到activity的控件,以此可以得到数据    EditText eText = (EditText) getActivity().findViewById(        R.id.editText2);    Log.i("info", "------->" + eText.getText().toString());    editText.setText(eText.getText().toString());  }});return view;

}

@Override
public void onStart() {
// TODO Auto-generated method stub
super.onStart();
}

@Override
public void onResume() {
// TODO Auto-generated method stub
super.onResume();
}

@Override
public void onPause() {
// TODO Auto-generated method stub
super.onPause();
}
//实现数据传递
public void getString(Callback callback) {
String msg = editText.getText().toString();
callback.getString(msg);
}
//创建接口
public interface Callback {
public void getString(String msg);
}
}

main的xml

0 0
原创粉丝点击