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