干货写在前面
fragment直接在xml添加,在activity创建的fragment对象的时候,必须要用xml的方式去创建不然不会报错,但是调用控件从别处获取数据时会出现报空问题。创建对象方法:
fragment f1 =(fragment)getsupportFragmentManger().findFragmentById(res id);
如果fragment是动态添加的,那么新建fragment对象就可以直接用new的方式去创建。
好了,那么开始今天的正文。fragment与activity有五种通信方式:Handler、广播、Handler、EventBus、Bundle和setArguments(bundle)和接口回调。今天来介绍最后一种方法。
接口回调通信:定义一个接口、acticity去实现接口抽象方法、fragment调用接口抽象方法。
fragment:
public class BlankFragment extends Fragment {
private tongxin tongxing;
private View inflate;
public void setfragment(tongxin a){
tongxing=a;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d("TAG", "fragment onCreate 方法");
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Log.d("TAG", "fragment onCreateView方法");
if (inflate==null){
inflate = inflater.inflate(R.layout.fragment_blank, container, false);
}
Button b2=inflate.findViewById(R.id.b3);
b2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
tongxing.send_for_activity("hello,this is come from blankfragment");
}
});
Button b3=inflate.findViewById(R.id.b4);
b3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//关键就在这里 如果在xml添加的碎片用new的方式去获取对象,此处将无法获取到接口对象
Log.d("TAG", "onClick: "+tongxing);
String send_ = tongxing.send_for_fragment();
Toast.makeText(BlankFragment.this.getContext(),send_,Toast.LENGTH_SHORT).show();
}
});
return inflate;
}
}
activity:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button b1 = findViewById(R.id.b1);
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
FragmentManager supportFragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = supportFragmentManager.beginTransaction();
BlankFragment blankFragment=new BlankFragment();//new方式获取fragment对象
fragmentTransaction.replace(R.id.f1,blankFragment);
fragmentTransaction.commit();
blankFragment.setfragment(new tongxin() {
@Override
public void send_for_activity(String name) {
Toast.makeText(MainActivity.this, name, Toast.LENGTH_SHORT).show();
}
@Override
public String send_for_fragment(){
return "this is come from activity";
}
});
}
});
/*b2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
BlankFragment blankFragment=(BlankFragment) getSupportFragmentManager().findFragmentById(R.id.f1);//解析资源方式获取fragment对象
blankFragment.setfragment(new tongxin() {
@Override
public void send_for_activity(String name) {
Toast.makeText(MainActivity.this, name, Toast.LENGTH_SHORT).show();
}
@Override
public String send_for_fragment(){
return "this is come from activity";
}
});
}
});*/
}
}