如何在“new Intent(ContactsContract.Intents.Insert.ACTION)”启动的 Activity 完成后刷新我的 ListView?
Posted
技术标签:
【中文标题】如何在“new Intent(ContactsContract.Intents.Insert.ACTION)”启动的 Activity 完成后刷新我的 ListView?【英文标题】:How do I refresh my ListView after the Activity launched by "new Intent(ContactsContract.Intents.Insert.ACTION)" finishes? 【发布时间】:2012-04-07 03:08:54 【问题描述】:我有一个类 (Contacts.java
) 扩展了 Activity
并有一个带有 3 个孩子的 TabHost
:
TabHost tabHost = (TabHost) findViewById(R.id.tabhost);
LocalActivityManager mlam = new LocalActivityManager(this, false);
mlam.dispatchCreate(savedInstanceState);
tabHost.setup(mlam);
TabHost.TabSpec spec;
Intent intentA = new Intent().setClass(this, A.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
spec = tabHost.newTabSpec("A").setIndicator("A").setContent(intentA);
tabHost.addTab(spec);
Intent intentB = new Intent().setClass(this, B.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
spec = tabHost.newTabSpec("B").setIndicator("B").setContent(intentB);
tabHost.addTab(spec);
Intent intentC = new Intent().setClass(this, C.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
spec = tabHost.newTabSpec("C").setIndicator("C").setContent(intentC);
tabHost.addTab(spec);
每个类(A.java、B.java 和 C.java)显示不同的联系人列表。注意:我不使用 ListActivity,我使用带有 ListView 的 Activity。
我有两个问题:
当我选择一个联系人时,我会转到另一个 ListActivity (Options.java),其中包含有关所选联系人的选项。好吧,当我从 Options.java 按返回按钮时,以前的联系人列表是空的。怎么看联系方式???我试图处理返回按钮以返回 A.class,但相反,它离开了一般应用程序。注意:所有意图都使用 Intent.FLAG_ACTIVITY_CLEAR_TOP 声明。
我在 A.class 的菜单按钮中添加了一个选项。这个选项是“添加新联系人”:
@Override
public boolean onCreateOptionsMenu(Menu menu)
MenuInflater inflater=new MenuInflater(getApplicationContext());
inflater.inflate(R.menu.options_menu, menu);
return true;
@Override
public boolean onOptionsItemSelected(MenuItem item)
switch (item.getItemId())
case R.id.menu_add_contact:
Intent addContactIntent = new Intent(ContactsContract.Intents.Insert.ACTION);
addContactIntent.setData(ContactsContract.Contacts.CONTENT_URI);
startActivity(addContactIntent);
break;
return true;
如何等待完成活动以使用新联系人更新联系人列表?我试过了:
使用finish();并完成FromChild(A.this);在“break”之前,但它会离开一般应用程序,而不是仅关闭 A.class 以重新创建。 使用 startActivityForResult() 而不是 startActivity() 及其 onActivityResult() 但我不知道 setResult() 和 finish() 放在哪里,因为 Intent addContactIntent = new Intent(ContactsContract.Intents.Insert.ACTION) 是android 的原生 Intent。 在“return true”之前刷新列表,但这是在添加联系人之前完成的。 我在 Contact.class 中添加了侦听器以检测更改并在每个子项中调用 onResume() 方法,但什么也不做:Contact.class:
tabHost.setOnTabChangedListener(new OnTabChangeListener()
public void onTabChanged(String tabId)
String currentTag = tabHost.getCurrentTabTag();
if(currentTag.equals("A"))
//intentA.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
mlam.startActivity(currentTag, new Intent(intentA));
else if(currentTag.equals("B"))
//intentB.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
mlam.startActivity(currentTag, new Intent(intentB));
else if(currentTag.equals("C"))
//intentC.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
mlam.startActivity(currentTag, new Intent(intentC));
);*/
A.class ...:
@Override
public void onResume()
super.onResume();
//refresh code
【问题讨论】:
【参考方案1】:使用 startActivityForResult() 并覆盖 onActivityResult 以了解启动的活动何时完成
【讨论】:
如何等待完成活动以使用新联系人更新联系人列表?我尝试过:使用 startActivityForResult() 而不是 startActivity() 及其 onActivityResult() 但我不知道 setResult() 和 finish() 放在哪里,因为它是 android 的本机意图。【参考方案2】:在Contacts.java
内onResume
方法中重新初始化所有你的列表。因此,每次您返回 Contacts.java
活动时,您的联系人列表都会刷新...
【讨论】:
在 onResume 里面我有:adapter.notifyDataSetChanged(); ContactListAdapter 适配器 2=setAllContacts(); list.setAdapter(adapter2); adapter2.notifyDataSetChanged();并且不工作以上是关于如何在“new Intent(ContactsContract.Intents.Insert.ACTION)”启动的 Activity 完成后刷新我的 ListView?的主要内容,如果未能解决你的问题,请参考以下文章
如何在异步任务中调用意图?或者如何在 onPostExecute 中开始新的活动?