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

时间:2013-07-20 06:21:38

标签: android android-contacts

图片1.这是我的create_layout。

enter image description here

图2.当我点击添加成员按钮时,这是我的自定义联系人列表。

enter image description here

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

enter image description here

这是我的代码。

 @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();                    
        }       
    });

我知道问题在于我创建了一个intent,以便当用户单击select按钮时,它将指向CreateTab类,它将重复onCreate。但是我怎么能再次阻止onCreate?

2 个答案:

答案 0 :(得分:0)

请勿再次启动上一个活动,只需更新选择器活动的结果,然后致电finish()

    Intent resultIntent = new Intent(this, PreviousActivity.class);
    resultIntent.putExtra("selection",checkedcontacts.toString());
    setResult(RESULT_OK,resultIntent);
    finish();

答案 1 :(得分:0)

你应该使用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()时将结果发送回旧活动

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

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

并关闭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();
        }       
    });

http://developer.android.com/training/basics/intents/result.html