Activity能否向自身发送Intent?点击编辑按钮应用崩溃求助
首先直接回应你的第一个疑问:Activity完全可以向自身发送Intent,你只需要像启动其他Activity一样,创建指向自身类的Intent即可,比如:
startActivity(new Intent(this, BeauticianProfile.class));
不过针对你当前的编辑资料场景,其实完全没必要这么做——直接修改控件状态就能实现需求,不用重启Activity。
接下来分析你点击按钮后App崩溃的核心问题,主要有3个关键点:
1. 按钮控件未初始化
你在类里声明了Button btnedit;,但在onCreate方法里没有通过findViewById获取这个按钮的实例,导致onClick方法里调用btnedit.getId()时触发空指针异常(NullPointerException),这是导致崩溃的直接原因。
2. EditText变量作用域冲突
你在类成员位置声明了EditText t1, t2, t3;,但在onCreate里又重新定义了final EditText t1 = ...这类局部变量,这会覆盖类成员变量。当onClick方法尝试访问t1时,实际访问的是未初始化的类成员变量,同样会触发空指针异常。
3. 启用EditText的方式不正确
仅设置setFocusable(true)不足以让EditText变为可编辑状态,你还需要同时设置setFocusableInTouchMode(true),或者更简单的用setEnabled(true)来直接启用控件(初始状态对应setEnabled(false)),这样逻辑更清晰。
修复后的完整代码
public class BeauticianProfile extends AppCompatActivity { Button btnedit; EditText t1, t2, t3, t4; // 把t4也加入类成员,避免重复定义 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_beautician_profile); // 初始化所有控件(注意替换按钮的实际ID为你布局里的ID) btnedit = findViewById(R.id.btn_edit); t1 = findViewById(R.id.name); t2 = findViewById(R.id.address); t3 = findViewById(R.id.email); t4 = findViewById(R.id.gender); // 初始状态禁用EditText,让它们不可编辑 t1.setEnabled(false); t2.setEnabled(false); t3.setEnabled(false); t4.setEnabled(false); // 接收并设置页面数据,增加空值判断避免崩溃 Bundle extras = getIntent().getExtras(); if (extras != null) { t1.setText(extras.getString("name", "")); t2.setText(extras.getString("mobile", "")); t3.setText(extras.getString("email", "")); t4.setText(extras.getString("gender", "")); } } public void onClick(View v) { if (v.getId() == btnedit.getId()) { // 启用所有EditText,允许编辑 t1.setEnabled(true); t2.setEnabled(true); t3.setEnabled(true); t4.setEnabled(true); } } }
额外小提示
如果后续需要保存编辑后的内容,可以在按钮点击逻辑里增加保存操作(比如存到SharedPreferences或数据库),完全不需要重启Activity来完成这个流程。
内容的提问来源于stack exchange,提问作者logicalerrors

