在Android应用程序中,edittext会自动填充。
在Android应用程序中,edittext会自动填充。
编辑 >> 编写整个活动代码
我在我的活动中有一个EditText和一个在其下方的按钮。当用户点击按钮时,会启动联系人选择器意图,并且用户可以选择一个联系人。在该活动的'onActivityResult'事件中,我获取所选联系人的ID,并通过我定义的API获取他/她的姓名,如下所示:
package com.iBirthDayNotofication; import java.text.SimpleDateFormat; import java.util.Date; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.provider.ContactsContract; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import com.iBirthdayNotification.Data.BirthdayContact; import com.iBirthdayNotification.Data.MyOwnContact; public class BirthdayEditor extends Activity { EditText et_Name; EditText et_Birthday; Button et_Btn; private Long mRowId; BirthdayContact db; String editor_tag; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.birthday_editor); db=new BirthdayContact(this); et_Name=(EditText)findViewById(R.id.editor_contactname_Input); et_Birthday=(EditText)findViewById(R.id.editor_birthdday_input); et_Btn=(Button)findViewById(R.id.editor_btn_add); et_Name.setText("Ahmagh"); mRowId = (savedInstanceState==null) ? null : (Long)savedInstanceState.getSerializable("_id"); //从调用活动中获取行ID if (mRowId == null) { Bundle extras = getIntent().getExtras(); mRowId = extras != null ? extras.getLong("_id") : null; } populateFields(); et_Btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub //打开联系人意图以选择联系人ID Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); startActivityForResult(intent,1001); } }); } void startContactActivity(Intent intent) { startActivityForResult(intent,101); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub //super.onActivityResult(requestCode, resultCode, data); if (resultCode == Activity.RESULT_OK) { String id = data.getData().getLastPathSegment(); mRowId=Long.parseLong(id); String tst=MyOwnContact.GetMyOwnContact(mRowId).GetName(); et_Name.setText(tst); BirthdayContact bc=db.GetBirthDay(mRowId); editor_tag="insert"; if(bc!=null) { SimpleDateFormat sp=new SimpleDateFormat("yyyy-MM-dd"); et_Birthday.setText(bc.GetBirthDay().toString()); editor_tag="edit"; } } } void populateFields() { if(mRowId!=null) { MyOwnContact mw=MyOwnContact.GetMyOwnContact(mRowId); BirthdayContact bc=db.GetBirthDay(mRowId); //填充小部件 et_Name.setText(mw.GetName()); et_Name.setText(bc.GetBirthDay().toString()); } } @Override protected void onPause() { // TODO Auto-generated method stub super.onPause(); saveState(); } @Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); populateFields(); } @Override protected void onSaveInstanceState(Bundle outState) { // TODO Auto-generated method stub super.onSaveInstanceState(outState); saveState(); outState.putSerializable(("_id"), mRowId); } private void saveState() { SimpleDateFormat sp=new SimpleDateFormat("yyyy-MM-dd"); Date birthDate=new Date(); try { if(et_Birthday.getText()!=null) { birthDate = sp.parse(et_Birthday.getText().toString()); } } catch(Exception exp) { // } if (editor_tag == "insert") { long id = db.AddNewBirthdayContact(mRowId, birthDate); if (id > 0) { mRowId = id; } } else if(editor_tag =="edit") { db.UpdateBirthDateContact(mRowId, birthDate); } } }
无论我将et_Name文本设置为("!!!!!!")还是将其设置为tst,它只显示这个:
Wed Aug 29 00:00:00 Asia/Tehran 1990
即使我注释掉
et_Name.setText("!!!!!!");
它仍然显示该日期。
注意:
我有一个表保存联系人的生日和他的ID,并且我定义了两个类来处理ContactAPI和该表。
你能帮助我吗?!
编辑:
Xml文件
编辑 >>
结果 :
问题出现的原因是在onresume事件中调用了populateFields()方法,但没有考虑操作模式。操作模式可能是插入或编辑。另外,我犯了一个错误,将et_name设置了两次。
解决方法是在调用populateFields()方法前,先判断操作模式。如果是插入模式,就不调用populateFields()方法。另外,确保et_name只被设置一次。
以下是解决方法的示例代码:
@Override protected void onResume() { super.onResume(); if (operationMode == EDIT_MODE) { populateFields(); } }
感谢大家的帮助。
问题原因:可能是因为在Android应用程序中没有调用super.onActivityResult(requestCode, resultCode, data)方法。
解决方法:可以尝试以下几种方法来解决问题:
1. 检查是否在布局文件中给EditText控件赋值了一个值。
2. 检查字符串的值是否正确,可以使用getString方法从字符串资源中获取值。
3. 检查调用更新文本框的方法是否在UI线程中进行。
如果上述方法都不能解决问题,可以尝试以下几种方法:
1. 使用调试工具查看变量的赋值情况,以确定值是在哪里被覆盖。
2. 在MainActivity的onCreate方法中获取EditText控件并尝试将其值设置为其他值,以验证其是否会被再次覆盖。
3. 如果以上方法都无法解决问题,可以将代码发布出来,以便其他人帮助解决问题。