已编辑>>编写整个活动代码 我的活动中有一个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设置它,它只显示:
Wed Aug 29 00:00:00 Asia / Tehran 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"
>
已编辑&gt;&gt;
结果:
答案 0 :(得分:1)
您没有关闭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"
/>
答案 1 :(得分:0)
不用
尝试super.onActivityResult(requestCode, resultCode, data);
我没有使用过联系意图,但是我已经使用了相机意图,而且我没有打过电话。
答案 2 :(得分:0)
我可以找到问题。在onresume事件中,我调用populateFields()方法而不考虑操作模式。操作模式可以是插入或编辑。而且我犯了一个错误并将et_name设置了两次。
谢谢你们。