Android 从contact intent添加联系人后如何刷新列表视图?
我有一个活动,其中我在列表视图中显示来自手机的联系人。现在,我添加了通过调用联系人意图添加新联系人的功能。这做得很好 但是当我在添加联系人后返回活动时,我看不到最新添加的联系人 我试图通过调用invalidate()刷新列表视图,在适配器上也尝试了调用invalidate()onResume方法 但是我不能得到结果。我还尝试使用startActivityForResult调用add intent,并在onActivityResult()中获取联系人,但也失败了 不知道出了什么问题。请帮忙 活动:Android 从contact intent添加联系人后如何刷新列表视图?,android,listview,android-intent,refresh,Android,Listview,Android Intent,Refresh,我有一个活动,其中我在列表视图中显示来自手机的联系人。现在,我添加了通过调用联系人意图添加新联系人的功能。这做得很好 但是当我在添加联系人后返回活动时,我看不到最新添加的联系人 我试图通过调用invalidate()刷新列表视图,在适配器上也尝试了调用invalidate()onResume方法 但是我不能得到结果。我还尝试使用startActivityForResult调用add intent,并在onActivityResult()中获取联系人,但也失败了 不知道出了什么问题。请帮忙 活动:
public class ContactList extends AppCompatActivity {
private ArrayList<contact> contact_list = null;
private contactAdapter mContactAdapter = null;
private ArrayList<contact> items;
private ArrayList<contact> selectedContacts;
boolean[] isChecked;
Cursor mCursor;
ListView lv;
public int RQS_PICK_CONTACT = 1,RQS_ADD_CONTACT = 2;
private static final int PERMISSIONS_REQUEST_READ_CONTACTS = 100;
ArrayList<Integer> selectedItemsPositions;
private ImageView done,back;
private boolean mContactListActivity;
private FloatingActionButton fab;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_contacts_list);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setTitle("");
TextView toolbarTitle = (TextView) toolbar.findViewById(R.id.toolbar_title);
toolbarTitle.setText("Select Contacts");
setSupportActionBar(toolbar);
done = (ImageView)findViewById(R.id.done);
back = (ImageView)findViewById(R.id.back);
fab = (FloatingActionButton)findViewById(R.id.fab);
contact_list = new ArrayList<contact>();
selectedContacts = new ArrayList<contact>();
// selectedItemsPositions = new ArrayList<>();
lv = (ListView)findViewById(R.id.list);
showContacts();
//getContacts();
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_INSERT,
ContactsContract.Contacts.CONTENT_URI);
startActivityForResult(intent,RQS_ADD_CONTACT);
}
});
}
@SuppressWarnings("unused")
private void getContacts() {
String[] projection = new String[] {
ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.Contacts.HAS_PHONE_NUMBER,
ContactsContract.Contacts._ID };
mCursor = managedQuery(ContactsContract.Contacts.CONTENT_URI, null, null, null, "upper("+ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + ") ASC");
while (mCursor.moveToNext()) {
contact contact = new contact();
String contactId = mCursor.getString(mCursor.getColumnIndex(ContactsContract.Contacts._ID));
contact.setContactid(mCursor.getString(mCursor.getColumnIndex(ContactsContract.Contacts._ID)));
contact.setContactName(mCursor.getString(mCursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)));
contact_list.add(contact);
}
isChecked = new boolean[mCursor.getCount()];
for (int i = 0; i < isChecked.length; i++) {
isChecked[i] = false;
}
this.mContactAdapter = new contactAdapter(this, R.layout.contact_list_item, contact_list);
lv.setAdapter(this.mContactAdapter);
mContactAdapter.notifyDataSetChanged();
// mCursor.close();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RQS_PICK_CONTACT) {
if (resultCode == RESULT_OK) {
getContacts();
}
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions,
int[] grantResults) {
if (requestCode == PERMISSIONS_REQUEST_READ_CONTACTS) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// Permission is granted
getContacts();
} else {
Toast.makeText(this, "Until you grant the permission, we canot display the names", Toast.LENGTH_SHORT).show();
}
}
}
private void showContacts()
{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && checkSelfPermission(Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.READ_CONTACTS}, PERMISSIONS_REQUEST_READ_CONTACTS);
//After this point you wait for callback in onRequestPermissionsResult(int, String[], int[]) overriden method
}
else {
getContacts();
}
}
@Override
public void onResume()
{
super.onResume();
mContactAdapter.notifyDataSetInvalidated();
//Intent intent = getIntent();
//intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
//finish();
//startActivity(intent);
}
}
公共类联系人列表扩展了AppCompatActivity{
private ArrayList contact_list=null;
私有contactAdapter mContactAdapter=null;
私有ArrayList项;
private ArrayList Selected Contacts;
布尔[]被检查;
光标mCursor;
ListView lv;
公共int RQS_拾取_触点=1,RQS_添加_触点=2;
私有静态最终整数权限\请求\读取\联系人=100;
ArrayList selectedItemsPositions;
私有ImageView完成,返回;
私有布尔mContactListActivity;
私人浮动按钮制造厂;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u contacts\u list);
Toolbar Toolbar=(Toolbar)findViewById(R.id.Toolbar);
工具栏。设置标题(“”);
TextView工具栏标题=(TextView)toolbar.findViewById(R.id.toolbar\u标题);
toolbarTitle.setText(“选择联系人”);
设置支持操作栏(工具栏);
完成=(ImageView)findViewById(R.id.done);
back=(ImageView)findViewById(R.id.back);
fab=(FloatingActionButton)findViewById(R.id.fab);
联系人列表=新建ArrayList();
selectedContacts=new ArrayList();
//selectedItemsPositions=newarraylist();
lv=(ListView)findViewById(R.id.list);
showContacts();
//getContacts();
fab.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
意向意向=新意向(意向.行动\u插入,
Contacts contract.Contacts.CONTENT\u URI);
startActivityForResult(意向、RQS添加联系人);
}
});
}
@抑制警告(“未使用”)
私有联系人(){
字符串[]投影=新字符串[]{
Contacts contract.Contacts.DISPLAY\u NAME,
Contacts contract.Contacts.HAS_电话号码,
Contacts contract.Contacts.\u ID};
mCursor=managedQuery(ContactsContract.Contacts.CONTENT_URI,null,null,null,“upper(“+ContactsContract.commondatatypes.Phone.DISPLAY_NAME+”)ASC”);
while(mCursor.moveToNext()){
触点=新触点();
String contactId=mCursor.getString(mCursor.getColumnIndex(ContactsContract.Contacts._ID));
contact.setContactid(mCursor.getString(mCursor.getColumnIndex(ContactsContract.Contacts.\u ID));
contact.setContactName(mCursor.getString(mCursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
联系人列表。添加(联系人);
}
isChecked=new boolean[mCursor.getCount()];
for(int i=0;i=Build.VERSION\u code.M&&checkSelfPermission(Manifest.permission.READ\u CONTACTS)!=PackageManager.permission\u已授予){
requestPermissions(新字符串[]{Manifest.permission.READ\u CONTACTS},PERMISSIONS\u REQUEST\u READ\u CONTACTS);
//在此之后,您将等待onRequestPermissionsResult(int,String[],int[])重写方法中的回调
}
否则{
getContacts();
}
}
@凌驾
恢复时公开作废()
{
super.onResume();
mContactAdapter.notifyDataSetionValidated();
//Intent=getIntent();
//intent.addFlags(intent.FLAG\u活动\u无\u动画);
//完成();
//星触觉(意向);
}
}
试试这个:
inside yourr onResume() add this
if (listvew!= null) {
listvew.invalidateViews();
}
adapter.notifyDataSetChanged();
将此添加到
onResume()中
尝试此listview.invalidateViews()@USER6265109没有帮助:-(@muruga5000)
if(adapter!= null){
listvew.setAdapter(adapter);
adapter.notifyDataSetChanged();
}