2. Fragment向Activity传递数据
Fragment中定义传值的回调接口,在生命周期的onAttach()
或onCreate()
方法中获取接口的实现,一般也就是相应的Activity。
public class ResourceFragment extends Fragment {
private EditText et_content;
private Button btn_pass;
public MyListener listener;
@Override
public void onCreate ( @Nullable Bundle savedInstanceState) {
super . onCreate ( savedInstanceState) ;
listener = ( MyListener) getActivity ( ) ;
}
@Nullable
@Override
public View onCreateView ( @NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater. inflate ( R. layout. fragment_resource, null) ;
et_content = view. findViewById ( R. id. et_content) ;
btn_pass = view. findViewById ( R. id. btn_pass) ;
btn_pass. setOnClickListener ( new View. OnClickListener ( ) {
@Override
public void onClick ( View v) {
String info = et_content. getText ( ) . toString ( ) . trim ( ) ;
listener. sendMessage ( info) ;
}
} ) ;
return view;
}
public interface MyListener {
public abstract void sendMessage ( String str) ;
}
}
Fragment需要传值的位置调用接口回调方法传值。
btn_pass = view. findViewById ( R. id. btn_pass) ;
btn_pass. setOnClickListener ( new View. OnClickListener ( ) {
@Override
public void onClick ( View v) {
String info = et_content. getText ( ) . toString ( ) . trim ( ) ;
listener. sendMessage ( info) ;
}
} ) ;
Activity实现回调接口重写回调方法获取传递的值。
public class MainActivity extends AppCompatActivity implements ResourceFragment. MyListener {
private TextView tv_show;
@Override
protected void onCreate ( Bundle savedInstanceState) {
super . onCreate ( savedInstanceState) ;
setContentView ( R. layout. activity_main) ;
tv_show = findViewById ( R. id. tv_show) ;
}
@Override
public void sendMessage ( String str) {
if ( str != null && ! "" . equals ( str) ) {
tv_show. setText ( str) ;
}
}
}
最终效果 当点击Fragment里面的【点击传值】按钮时,将Fragment中的EditText里面的文本传递给Activity,并在Activity中的TextView显示。