在Android应用程序中,edittext会自动填充。

8 浏览
0 Comments

在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文件

 

编辑 >>

结果 :

enter image description here

0
0 Comments

问题出现的原因是在onresume事件中调用了populateFields()方法,但没有考虑操作模式。操作模式可能是插入或编辑。另外,我犯了一个错误,将et_name设置了两次。

解决方法是在调用populateFields()方法前,先判断操作模式。如果是插入模式,就不调用populateFields()方法。另外,确保et_name只被设置一次。

以下是解决方法的示例代码:

@Override
protected void onResume() {
    super.onResume();
    
    if (operationMode == EDIT_MODE) {
        populateFields();
    }
}

感谢大家的帮助。

0
0 Comments

问题原因:可能是因为在Android应用程序中没有调用super.onActivityResult(requestCode, resultCode, data)方法。

解决方法:可以尝试以下几种方法来解决问题:

1. 检查是否在布局文件中给EditText控件赋值了一个值。

2. 检查字符串的值是否正确,可以使用getString方法从字符串资源中获取值。

3. 检查调用更新文本框的方法是否在UI线程中进行。

如果上述方法都不能解决问题,可以尝试以下几种方法:

1. 使用调试工具查看变量的赋值情况,以确定值是在哪里被覆盖。

2. 在MainActivity的onCreate方法中获取EditText控件并尝试将其值设置为其他值,以验证其是否会被再次覆盖。

3. 如果以上方法都无法解决问题,可以将代码发布出来,以便其他人帮助解决问题。

0
0 Comments

问题原因:没有正确关闭EditText标签。

解决方法:

1. 确保EditText标签正确关闭。

2. 可以参考以下示例代码:


以上就是解决EditText自动填充的问题的原因和解决方法。

0