2

图 1. 这是我的 create_layout。

在此处输入图像描述

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

我知道问题是我做了一个意图,以便当用户单击选择按钮时,它将指向 CreateTab 类,该类将重复 onCreate。但是我怎样才能防止 onCreate 再次发生?

4

2 回答 2

0

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

    Intent resultIntent = new Intent(this, PreviousActivity.class);
    resultIntent.putExtra("selection",checkedcontacts.toString());
    setResult(RESULT_OK,resultIntent);
    finish();
于 2013-07-20T07:00:58.990 回答
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

于 2013-07-20T07:03:49.967 回答