如何在“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.javaonResume 方法中重新初始化所有你的列表。因此,每次您返回 Contacts.java 活动时,您的联系人列表都会刷新...

【讨论】:

在 onResume 里面我有:adapter.notifyDataSetChanged(); ContactListAdapter 适配器 2=setAllContacts(); list.setAdapter(adapter2); adapter2.notifyDataSetChanged();并且不工作

以上是关于如何在“new Intent(ContactsContract.Intents.Insert.ACTION)”启动的 Activity 完成后刷新我的 ListView?的主要内容,如果未能解决你的问题,请参考以下文章

如何在表单提交后保留文本(如何在提交后不删除自身?)

如何在异步任务中调用意图?或者如何在 onPostExecute 中开始新的活动?

在 Avkit 中如何使用这三行代码,以及如何将音乐静音”

如何在 JDBC 中启动事务?

如何在 Fragment 中调用 OnActivityResult 以及它是如何工作的?

如何使用 Firebase 在 Web 上托管 Flutter?它的效果如何?