在android应用程序中自动填充edittext
编辑>>编写整个活动代码 我的活动中有一个编辑文本,下面有一个按钮。当用户单击该按钮时,联系人选取器的意图被取消,用户可以选取一个联系人。在该活动的“onActivityResult”事件中,我获取所选联系人id,并通过我定义的API获取其姓名,如下所示:在android应用程序中自动填充edittext,android,Android,编辑>>编写整个活动代码 我的活动中有一个编辑文本,下面有一个按钮。当用户单击该按钮时,联系人选取器的意图被取消,用户可以选取一个联系人。在该活动的“onActivityResult”事件中,我获取所选联系人id,并通过我定义的API获取其姓名,如下所示: package com.iBirthDayNotofication; import java.text.SimpleDateFormat; import java.util.Date; import android.app.Activit
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_名称文本(“!!!!!!!!!”)或使用tst设置时,它仅显示以下内容:
1990年8月29日星期三00:00:00亚洲/德黑兰
即使在我评论这篇文章的时候
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"
>
编辑>>
结果:
在不使用的情况下尝试
super.onActivityResult(requestCode, resultCode, data);
我没有使用过接触意图,但在使用相机意图方面做了很多工作,我也没有打电话给super 我发现了问题。在onresume事件中,我调用了populateFields()方法,但没有考虑到操作模式。操作模式可以是插入或编辑。而且我犯了一个错误,设置了两次et_名称
谢谢各位。你们不需要关闭编辑文本标签 尝试:
您是否从子活动返回Activity.RESULT\u OK结果代码?我只使用Intent Intent=new Intent(Intent.ACTION\u PICK,Contacts contract.Contacts.CONTENT\u URI);要调用contact picker,我不知道它是否返回ok。您应该检查结果代码,setText()方法可能不会在您的代码中执行。您必须在其他位置使用et_文本。请调试它…………您可以发布et_名称的xml以及它的findviewbyid吗?我不确定您为什么会得到它。你确定你没有在其他地方设置它。阅读这篇文章它显示了如何读取联系人最简单的方法是调试并查看在何处以及如何设置此值。这里有一个链接,介绍如何检查布局中是否未为其赋值。另外,您用于提示的字符串的值是多少?我在两个位置设置了该值,并在两个位置都设置了断点,但根据应用程序逻辑,只有我在上面代码中提到的on正在运行。我还通过读取字符串资源给出了提示值:单击以选择联系人另一件要检查的事情是确保在UI线程上调用您更新文本字段的调用。
<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"
/>