发表于: 2018-10-16 23:01:26
0 871
一、今天完成的事情
1. 学习了Fragment传值给Activity
实现方式是在Fragment中定义一个接口,在Activity中实现接口,获取接口中的数据,这里的Fragment位于Activity中。
(1)在Fragment中
public class SetNameFragment extends Fragment {
private static final String TAG = "SetNameFragment";
private SendMessageName sendMessageName;
private EditText setNameET;
private Button confirmBT;
private String name;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View square = inflater.inflate(R.layout.fragment_setname, container, false );
initView(square);
return square;
}
//初始化
public void initView(View square) {
setNameET = (EditText) square.findViewById(R.id.et_setname);
confirmBT = (Button) square.findViewById(R.id.bt_confirm);
confirmBT.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
name = setNameET.getText().toString();
//验证格式
if (TextUtils.isEmpty(name)) {
Toast.makeText(getContext(), "不能为空", Toast.LENGTH_SHORT).show();
} else if (!checkNameFomart(name)) {
Toast.makeText(getContext(), "格式错误", Toast.LENGTH_SHORT).show();
} else if(!TextUtils.isEmpty(name) && checkNameFomart(name)) {
sendMessageName.getMessageName(name);
}
}});
}
/**
* 验证用户名格式
* 只能包含字母、数字、中文,位数限制:1-12
*/
public Boolean checkNameFomart(String name) {
String nameRegex = "[A-Za-z0-9\\u4e00-\\u9fa5]+${1,12}";
// Pattern pattern = Pattern.compile(nameRegex);
//return pattern.matches(nameRegex, name);
return name.matches(nameRegex);
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof SendMessageName) {
sendMessageName = (SendMessageName) context;
} else {
throw new IllegalArgumentException("Activity must implements SendMessageName");
}
}
/**
* 回调接口,用于向activity传参
*/
public interface SendMessageName {
void getMessageName(String name);
}
}
(2)在Activity中
/*
实现SetNameFragment的SendMessageName接口的回调方法
*/
@Override
public void getMessageName(String name) {
glassView.setVisibility(GONE);
showFragmentFL.setVisibility(GONE);
showNameTV.setText(name);
}
需要注意的是Fragment用两种引用方式,一种是在Android3.0时引入的,还有一种是Support V4包里面的,在support v4包中onAttach(Activity activity)已被弃用,只能用onAttach(Context context),最好是使用v4包
import android.support.v4.app.Fragment;
具体解释参考:Android项目开发填坑记-Fragment的onAttach
2.RaidoGroup和RadioButton
之前在做标签切换的时候,网上有很多教程都是通过RaidoGroup和RadioButton组合来实现的,但我当时没去使用这两个控件,今天学习了一下。
RadioGroup是一个容器,里面可以放置多个RadioButton,放置在RadioGroup中的RadioButton只能有个被选中,效果如图:
二、明天计划的事情
实现用户个人信息的加载和上传。
三、遇到的问题
无
四、收获
对接口回调有了一个概念。
评论