【问题标题】:edittext get filled automatically in android application在android应用程序中自动填充edittext
【发布时间】:2012-03-17 20:44:45
【问题描述】:

已编辑 >> 编写整个活动代码 我的活动中有一个 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");

        //Get row id from calling activity
        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

                //Log.v("click message","hey");

                //Open Contact Intent to pick contact 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);

            //populate widgtes
            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 设置,它都只显示:

8 月 29 日星期三 00:00:00 亚洲/德黑兰 1990

即使我评论了

et_Name.setText("!!!!!!");

是显示那个日期。

注意: 我有一个保存联系人生日和他的 id 的表,并且我定义了两个类来处理 ContactAPI 和那个表。

你能帮帮我吗?!

编辑:

Xml 文件

 <EditText
            android:id="@+id/editor_contactname_Input"
            android:layout_weight="1"
            android:hint="@string/editor_hint_contact"
            android:layout_width="0dp"
            android:layout_height="wrap_content"

            >

已编辑 >>

结果:

【问题讨论】:

  • 您是否从您的子活动中返回 Activity.RESULT_OK 结果代码?
  • 我只使用 Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);调用联系人选择器,我不知道它是否返回正常
  • 您应该检查结果代码,setText() 方法可能不会在您的代码中执行。
  • 你一定是在其他地方使用了et_text。请调试它............
  • 你能发布 et_Name 的 xml 以及它的 findviewbyid 吗?

标签: android


【解决方案1】:

不用试一下

super.onActivityResult(requestCode, resultCode, data);

我没有使用过联系意图,但在相机意图方面做了很多工作,而且我不必打电话给 super。

【讨论】:

  • 我不确定你为什么会这样。你确定你没有在其他地方设置它吗?阅读这篇文章它显示了如何阅读联系人stackoverflow.com/questions/1721279/…
  • 最简单的方法是调试并查看该值的设置位置和方式。这是一个关于如何做到这一点的链接androidacademy.com/1-tutorials/43-hands-on/…
  • 检查您没有在布局中为其分配值。另外,您用于提示的字符串的值是多少?
  • 我在两个地方设置了值,并在两个地方都设置了断点,但是根据应用程序逻辑,只有我在上面的代码中提到的 on 正在运行。我还通过从字符串资源中读取来给出提示值:Click to pick contact
  • 要检查的另一件事是确保在 UI 线程上调用更新文本字段的调用。
【解决方案2】:

我可以找到问题。在 onresume 事件中,我调用 populateFields() 方法而不考虑操作模式。操作模式可以是插入或编辑。而且我犯了一个错误,两次设置了et_name。

谢谢大家。

【讨论】:

    【解决方案3】:

    你没有关闭 de EditText 标签。

    尝试:

    <EditText
            android:id="@+id/editor_contactname_Input"
            android:layout_weight="1"
            android:hint="@string/editor_hint_contact"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
    
            />
    

    【讨论】:

      猜你喜欢
      • 2020-09-22
      • 1970-01-01
      • 2012-11-18
      • 1970-01-01
      • 2018-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多