Android 如何防止打开重复的布局?

Android 如何防止打开重复的布局?,android,android-contacts,Android,Android Contacts,图1。这是我的创建布局 图2。这是我单击“添加成员”按钮时的自定义联系人列表 图3。现在问题来了。当按下选择按钮时。我想将选择的联系人值列回到我的第一个图像布局中。但它正在打开我的第一个布局的副本并出现在那里 这是我的密码 @Override public void onClick(View v) { StringBuilder checkedcontacts= new StringBuilder(); System.out

图1。这是我的创建布局

图2。这是我单击“添加成员”按钮时的自定义联系人列表

图3。现在问题来了。当按下选择按钮时。我想将选择的联系人值列回到我的第一个图像布局中。但它正在打开我的第一个布局的副本并出现在那里

这是我的密码

 @Override
        public void onClick(View v) {
            StringBuilder checkedcontacts= new StringBuilder();
            System.out.println("............"+ma.mCheckStates.size());
            for(int i = 0; i < name1.size(); i++)
                {
                if(ma.mCheckStates.get(i)==true)
                {
                     checkedcontacts.append(name1.get(i).toString());
                     checkedcontacts.append("\n"); 

                }

                else
                {
                    System.out.println("..Not Checked......"+name1.get(i).toString());
                }

            }     

            Intent i = new Intent (getApplicationContext(), CreateTab.class);
            i.putExtra("str",checkedcontacts.toString());
            startActivity(i);
            finish();                    
        }       
    });
@覆盖
公共void onClick(视图v){
StringBuilder checkedcontacts=新建StringBuilder();
System.out.println(“………”+ma.mCheckStates.size());
对于(int i=0;i

我知道问题在于我有一个意图,当用户单击select按钮时,它将指向CreateTab类,该类将重复onCreate。但是如何防止再次创建呢?

不要再次启动上一个活动,只需更新选择器活动的结果,然后调用
finish()


您应该使用onActivityResult()方法读取返回的结果

在CreateTab.class中执行此操作

Intent i = new Intent(getApplicationContext(), AddMember.class);
startActivityForResult(i, 100); // 100 is some code to identify the returning result
方法从新创建的活动中读取结果

@Override
protected void onActivityResult(int requestCode,
                                 int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(resultCode == 100){
         String str = data.getExtras().get("str");
    }
}
使用StartActivityForResult()时将结果发送回旧活动

并关闭AddMember活动

finish()
所以你的点击事件应该是这样的

 @Override
        public void onClick(View v) {
            StringBuilder checkedcontacts= new StringBuilder();
            System.out.println("............"+ma.mCheckStates.size());
            for(int i = 0; i < name1.size(); i++)
                {
                if(ma.mCheckStates.get(i)==true)
                {
                     checkedcontacts.append(name1.get(i).toString());
                     checkedcontacts.append("\n"); 

                }

                else
                {
                    System.out.println("..Not Checked......"+name1.get(i).toString());
                }

            }     

              Intent i = new Intent();
              i.putExtra("str", checkedcontacts.toString());

              // Setting resultCode to 100 to identify on old activity
              setResult(100,i);
              finish();
        }       
    });
@覆盖
公共void onClick(视图v){
StringBuilder checkedcontacts=新建StringBuilder();
System.out.println(“………”+ma.mCheckStates.size());
对于(int i=0;i

您不能阻止活动表单加载onCreate方法。但您可以做一件事,即可以使用SINGLE_任务标志打开活动,这样它将从历史堆栈加载活动,而不会创建新实例。在您的情况下,您可以使用startactivityForresult i thinkOk。非常感谢。是否有使用单任务标志或StartActivityForeResult的开始活动的示例?i.setFlags(标志单活动顶部);你好谢谢(int请求代码、int结果代码、意图数据)。它说有错误的构造。@EtAndrea在CreateTab.class中右键单击->源->覆盖/实现方法查找onActivityResult并将此事件添加到您的class.Hi。谢谢你的回答。只是另一个小问题,data.getExtras().get(“str”);无法在我的CreateTab.classuse data.getExtras()中从对象转换为字符串。getString(“str”)请查看我的要点。我完全按照您的代码操作,没有错误,但单击按钮后没有显示任何内容。嗨,谢谢。但是新的意图(这个,PreviousActivity.class)是未定义的。为什么会这样?@EtAndrea确保在活动中调用它,或者提供一个
上下文作为它的第一个参数。第二个参数是要将结果发送到的活动类
PreviousActivity
是我使用的一个示例名称。Hi。非常感谢。现在没有错误。但仍然不工作,请参考并帮助我。
finish()
 @Override
        public void onClick(View v) {
            StringBuilder checkedcontacts= new StringBuilder();
            System.out.println("............"+ma.mCheckStates.size());
            for(int i = 0; i < name1.size(); i++)
                {
                if(ma.mCheckStates.get(i)==true)
                {
                     checkedcontacts.append(name1.get(i).toString());
                     checkedcontacts.append("\n"); 

                }

                else
                {
                    System.out.println("..Not Checked......"+name1.get(i).toString());
                }

            }     

              Intent i = new Intent();
              i.putExtra("str", checkedcontacts.toString());

              // Setting resultCode to 100 to identify on old activity
              setResult(100,i);
              finish();
        }       
    });