Fragment的接口回调

重点介绍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 

posted @ 2016-12-26 16:14  天涯海角路  阅读(575)  评论(0)    收藏  举报