2013-07-20 3 views
2

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

는 사용자가 선택 버튼을 클릭 할 때, 그것은 다시에서 onCreate를 반복합니다 CREATETAB 클래스에 가리 킵니다 있도록 내가 의도를 만드는 것입니다. 그러나 어떻게 내가 onCreate를 다시 막을 수 있습니까?

+0

당신은에서 onCreate 방법을로드 활동 양식을 막을 수 없습니다. 하지만 SINGLE_TASK 플래그를 사용하여 활동을 열 수있는 한 가지 작업을 수행하여 히스토리 스택에서 활동을로드하고 새 인스턴스를 작성하지 않도록 할 수 있습니다. –

+0

당신의 경우 startactivityForresult를 사용할 수 있습니다. –

+0

Ok. 고맙습니다. SINGLE_TASK 플래그 또는 startactivityForeesult를 사용하여 활동을 여는 예가 있습니까? –

답변

0

반환 된 결과를 읽으려면 onActivityResult() 메서드를 사용해야합니다. 에 startActivityForResult()를 사용하는 경우

@Override 
protected void onActivityResult(int requestCode, 
           int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if(resultCode == 100){ 
     String str = data.getExtras().get("str"); 
    } 
} 

보내기 결과 다시 옛 활동에 새로 생성 된 활동의 결과를 읽을

Intent i = new Intent(getApplicationContext(), AddMember.class); 
startActivityForResult(i, 100); // 100 is some code to identify the returning result 

방법 당신의 CreateTab.class에서이 작업을 수행

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

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

및 추가 회원 활동을 닫으십시오.

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

+0

안녕하세요. 감사. (int requestCode, int resultCode, 의도 데이터). 그것은 틀린 구조가 있다고 말했다. –

+0

CreateTab.class의 @EtAndrea 오른쪽 클릭 -> 소스 -> 덮어 쓰기/구현 메소드 을 찾아서 onActivityResult를 찾아 클래스에 추가하십시오. –

+0

안녕하세요. 답변 감사합니다. 또 다른 작은 문제 인 data.getExtras(). get ("str"); 내 CreateTab.class에서 개체를 문자열로 변환 할 수 없습니다. –

0

이전 활동을 다시 시작하지 말고 선택기 활동의 결과를 업데이트하고 finish()으로 전화하십시오.

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

안녕하세요. 감사합니다. 새로운 Intent (this, PreviousActivity.class)는 정의되지 않습니다. 왜 이렇게이다? –

+0

@EtAndrea Activity 내에서 호출하거나 첫 번째 인수로 Context를 제공해야합니다. 두 번째 인수는 결과를 보내려는 활동 클래스입니다. 'PreviousActivity'는 내가 사용한 예제 이름입니다. –

+0

안녕하세요. 고맙습니다. 지금 오류가 없습니다. 하지만 여전히 작동하지, 제발 나를 참조하십시오. https://gist.github.com/anonymous/27e67c91f9d6fa8e4f2c –

관련 문제