发表于: 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只能有个被选中,效果如图:

      


二、明天计划的事情

      实现用户个人信息的加载和上传。

      

三、遇到的问题

       


四、收获

      对接口回调有了一个概念。




返回列表 返回列表
评论

    分享到