m0_67813150 2024-05-16 15:25 采纳率: 20.8%
浏览 3
已结题

主活动如何改为视图绑定

如何将主活动改为视图绑定,请给出代码改动,谢谢

package com.example.myapplication11;

import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.app.WindowDecorActionBar;

import android.annotation.SuppressLint;
import android.app.assist.AssistStructure;
import android.content.Intent;
import android.os.Bundle;
import android.service.controls.templates.ControlButton;
import android.view.View;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.RadioGroup;

import com.example.myapplication11.databinding.ActivityMainBinding;


public class MainActivity extends AppCompatActivity {
    private EditText nameText; // 修改为EditText
    private EditText psdText; // 修改为EditText
    private EditText repsdText; // 修改为EditText
    private EditText cityText; // 修改为EditText
    private AssistStructure.ViewNode maleBth;

    @SuppressLint("WrongViewCast")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 初始化EditText
        nameText = findViewById(R.id.name);
        psdText = findViewById(R.id.psd);
        repsdText = findViewById(R.id.repsd);
        cityText = findViewById(R.id.city);

    }

    @SuppressLint("RestrictedApi")
    public void register(View view) {
        String checkResult = checkInfo();
        if (checkResult != null) {
           AlertDialog.Builder builder = new AlertDialog.Builder(this);

            builder.setTitle("失败提示");
            builder.setMessage(checkResult);
            builder.setPositiveButton("确定", null);
            builder.create().show();
        } else {
            String male = "男";
            if (maleBth.isChecked()) {
                male = "女";
            }
            Intent intent = new Intent(this, ResultActivity.class);
            intent.putExtra("name", nameText.getText().toString());
            intent.putExtra("city", cityText.getText().toString());
            intent.putExtra("gender", male);
            startActivity(intent);
        }
    }


    @SuppressLint("RestrictedApi")
    public String checkInfo() {
        String name;
        name = nameText.getText().toString();
        if (name==null||"".equals(name)) {
            return "用户名不能为空!";
        }
        String psd = psdText.getText().toString();
        if (psd.length() < 6 || psd.length() > 15) {
            return "密码位数应在6-15位之间";
        }
        String repsd = repsdText.getText().toString();
        if (!psd.equals(repsd)) {
            return "两次密码必须一致";
        }
        return null;
    }


    public void chooseCity(View view) {
        Intent intent = new Intent(this, ChooseCityActivity.class);
        startActivityForResult(intent, 0);
    }

    @SuppressLint("RestrictedApi")
    protected void onActivityResult(int requestcode, int resultCode, Intent data) {
        super.onActivityResult(requestcode, resultCode, data);
        if (data != null) {
            if (resultCode == 0x11) {
                String city = data.getStringExtra("city");
                cityText.setText(city);
            }
        }
    }
}




  • 写回答

2条回答 默认 最新

  • 阿里嘎多学长 2024-05-16 15:25
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    您想要解决的问题

    您提问的目的是要将现有的MainActivity从传统的视图查找方式改为使用视图绑定(View Binding)的方式,以简化代码并提高开发效率。

    问题出现原因

    这个问题出现的原因是您当前的项目使用的是传统的通过findViewById进行视图查找的方式,这种方式在项目较大时会导致代码冗长且容易出错。视图绑定是Android提供的一种新机制,它可以直接将XML布局文件中的视图绑定到对应的Java代码中,从而避免了手动查找视图的过程。

    问题解决方案

    为了将您的MainActivity改为使用视图绑定,您需要进行以下步骤:

    1. 启用视图绑定:确保您的build.gradle文件(Module: app)中启用了视图绑定功能。

      android {
          ...
          viewBinding {
              enabled = true
          }
      }
      
    2. 生成绑定类:视图绑定会自动为您的每个布局文件生成一个对应的绑定类。对于activity_main.xml,它将生成一个名为ActivityMainBinding的类。

    3. 修改MainActivity代码:使用生成的绑定类来代替传统的视图查找。

    以下是修改后的MainActivity代码:

    package com.example.myapplication11;
    
    import androidx.appcompat.app.AppCompatActivity;
    import android.os.Bundle;
    import android.widget.EditText;
    import com.example.myapplication11.databinding.ActivityMainBinding;
    
    public class MainActivity extends AppCompatActivity {
        private ActivityMainBinding binding; // 使用视图绑定对象
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            binding = ActivityMainBinding.inflate(getLayoutInflater()); // 使用绑定对象
            setContentView(binding.getRoot()); // 设置绑定的根视图
    
            // 直接使用绑定对象访问视图
            EditText nameText = binding.name;
            EditText psdText = binding.psd;
            EditText repsdText = binding.repsd;
            EditText cityText = binding.city;
    
            // 其余代码保持不变
        }
    
        // 其余方法保持不变,只需将findViewById替换为binding.对应控件名
    }
    

    提供代码

    上述代码展示了如何将MainActivity中的视图查找替换为视图绑定。

    代码运行方式

    1. 确保您的Android Studio是最新版本。
    2. 确保您的项目的build.gradle文件启用了视图绑定。
    3. 应用上述代码更改并同步您的项目。
    4. 运行您的应用。

    代码预期运行结果

    应用将正常运行,且在MainActivity中,您不再需要使用findViewById来获取视图,而是直接通过binding对象来访问。

    推荐相关链接

    以上链接可以帮助您更深入地了解视图绑定的概念和如何在项目中启用它。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月24日
  • 已采纳回答 5月16日
  • 创建了问题 5月16日