1

첫 번째 컨텍스트 메뉴에서 두 번째 활동을 호출하려는 두 가지 활동이 있습니다. 이것이해야 할 일입니다.컨텍스트 메뉴에서 새 활동을 시작하고 onCreate에서 다른 활동을 자동화하면 같은 활동이 다시 실행됩니다.

  • 활동 상황에 맞는 메뉴를 클릭하면 자동으로 전달 된 엑스트라에 따라 활동 B. 활동 B의에서 onCreate에서

  • 를 시작할 AlertBuilder 대화 상자를 표시하고 다음 중 하나를 사진을 촬영하거나를 선택해야합니다 영상.

활동 A의 컨텍스트 메뉴 항목을 클릭하면 활동 B가 시작되고 AlertDialog가 표시됩니다. 사진을 찍을 수있는 옵션을 선택하면 MediaStore.ACTION_IMAGE_CAPTURE 인 텐트가 시작되고 사진이 촬영되면 활동 B가 다시 실행되고 AlertDialog가 표시됩니다.

활동 A - 컨텍스트 메뉴

@Override 
    public boolean onContextItemSelected(MenuItem item) { 
     AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); 
     final ItemClass selItem = (ItemClass)this.getListView().getItemAtPosition(info.position);  
     Intent intent; 
     SyncData sync; 

     switch (item.getItemId()) { 
      case R.id.start_activity_b: 
      Intent intent = new Intent(ActivityA.this, ActivityB.class); 
      intent.putExtra("data1", selItem.itemID); 
      intent.putExtra("data2", "AUTO"); 
      Measurements.this.startActivityForResult(intent, REQUESTCODE_ACTIVITYB); 


      return true; 
       default: 
        return super.onContextItemSelected(item); 
     } 
    } 

활동 B -에서 onCreate 코드

@Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(R.layout.listview_main); 

     Bundle extras = getIntent().getExtras(); 
     if ((extras != null) && (extras.containsKey("data1"))) { 
      this.itemID = extras.getString("data1"); 
     } 
     if ((extras != null) && (extra.containsKey("data2"))) { 
      this.createAlertDialog(); 
     } 
    } 

답변

0

나는 이유를 이해하기 위해 반복 시도 후, 여기에 해결책을 발견했다. 컨텍스트 메뉴에서 실행 가능 파일을 작성하는 것만 큼 빨리 완료해야합니다. 그렇지 않으면 활동을 다시 작성합니다. 나는 틀릴 수 있고 저에 이것을 정정하게 자유롭게 느낀다.

활동 A - 이미 UI Thread에 있기 때문에 상황에 맞는 메뉴

@Override 
    public boolean onContextItemSelected(MenuItem item) { 
     AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); 
     final ItemClass selItem = (ItemClass)this.getListView().getItemAtPosition(info.position);  
     Intent intent; 
     SyncData sync; 

     switch (item.getItemId()) { 
      case R.id.start_activity_b: 
       runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         Intent intent = new Intent(ActivityA.this, ActivityB.class); 
         intent.putExtra("data1", selItem.itemID); 
         intent.putExtra("data2", "AUTO"); 
         Measurements.this.startActivityForResult(intent, REQUESTCODE_ACTIVITYB); 
        } 
       }); 

       return true; 
      default: 
       return super.onContextItemSelected(item); 
     } 
    } 
+1

여기서 'runnable'이 필요하지 않습니다. 'startActivityForResult()'를 사용하고 있기 때문에,'Dialog'가 닫힐 때'setResult'를 호출하고'ActivityB'를 끝낼 수 있어야합니다 – codeMagic

1

내 의견에 명시된 바와 같이, 당신은 runOnUiThread()을 필요가 없습니다. 이렇게하는 것보다 더 좋은 방법이 있습니다. 다시 말하지만, 내 코멘트에서와 마찬가지로 startActivityForResult()을 사용하여 ActivityB을 시작하기 때문에 대화 상자가 닫히면 setResult를 호출하고 ActivityB를 완료 할 수 있어야합니다.

그냥 정상적으로보아야 만합니다. 그러나 무엇이든지간에 문제가 생기면 DialogDialogActivity and give it a 대화 상자 테마 by adjusting your manifest`를 만들 수 있습니다.

<activity android:name=".ActivityName"   
    android:theme="@android:style/Theme.Dialog"> // add this line to give it the effect of a dialog 
</activity> 

사용하여 당신은 startActivityForResult()를 사용하여 결과에 대한이 Activity을 시작할 수 있습니다. 그런 다음 결과가 ActivityB으로 돌아 오면 완료하고 ActivityA 또는 필요한 작업으로 돌아갈 수 있습니다.

희망이 도움이되었습니다.

관련 문제